我有一个很大的excel文件要清理大约200000行。因此,如果条件满足,我会使用pandas删除不需要的行,但运行起来需要一些时间。你知道吗
我当前的代码如下所示
def cleanNumbers(number): # checks number if it is a valid number
vaild = True
try:
num = pn.parse('+' + str(number), None)
if not pn.is_valid_number(num):
vaild = False
except:
vaild = False
return vaild
for UncleanNum in tqdm(TeleNum):
valid = cleanNumbers(UncleanNum) # calling cleanNumbers function
if valid is False:
df = df.drop(df[df.telephone == UncleanNum].index)
# dropping row if number is not a valid number
这行代码大约需要30分钟才能完成。有没有一种更有效的方法来和熊猫划船?如果不是,我可以使用numpy来获得相同的输出吗?你知道吗
我不是那么喜欢大熊猫或者小矮人,所以如果你有什么建议可以分享的话,那会很有帮助的。你知道吗
编辑:
我使用phonenumbers lib检查电话号码是否有效。如果它不是一个有效的电话号码,我会删除该号码所在的行。你知道吗
示例数据
address name surname telephone
Street St. Bill Billinson 7398673456897<--let say this is wrong
Street St. Nick Nick 324523452345
Street St. Sam Sammy 234523452345
Street St. Bob Bob 32452345234534<--and this too
Street St. John Greg 234523452345
输出
address name surname telephone
Street St. Nick Nick 324523452345
Street St. Sam Sammy 234523452345
Street St. John Greg 234523452345
这就是我的代码所做的,但是它很慢。你知道吗
在我看来,这里的主bootleneck不是drop,而是为大量值重复的自定义函数。你知道吗
创建所有有效数字的列表,然后使用^{} 按^{} 筛选:
编辑:
经过一些测试,解决方案应该简化,因为函数返回布尔值:
相关问题 更多 >
编程相关推荐