【发布时间】:2019-12-15 00:01:26
【问题描述】:
我有一个大的 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 来获得相同的输出吗?
我对 pandas 或 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
这是我的代码所做的,但速度很慢。
【问题讨论】:
-
您能否提供示例输入数据和预期输出
-
for 循环会消耗时间,如果你发布你的数据框,有人会想出一个 vecorized 的解决方案!
-
200000 非常小。如果您能提供一些示例数据,S/O pandas 天才会在几分钟内拿出解决方案。