gpt4 book ai didi

python - 如何加速 pandas drop() 方法?

转载 作者:行者123 更新时间:2023-12-04 19:49:01 26 4
gpt4 key购买 nike

我有一个很大的 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 分钟。有没有更有效的方法来删除 Pandas 的行?如果不能,我可以使用 numpy 获得相同的输出吗?

我对 pandas 或 numpy 不是很熟悉,所以如果您有任何提示可以分享,那将会很有帮助。

编辑:

我正在使用 phonenumbers 库来检查电话号码是否有效。如果它不是有效的电话号码,我会删除该号码所在的行。

示例数据

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

这就是我的代码所做的,但速度很慢。

最佳答案

在我看来这里的主要缺点不是下降,而是自定义函数重复大量值。

创建所有有效号码的列表,然后按 boolean indexing 过滤与 Series.isin :

v = [UncleanNum for UncleanNum in tqdm(TeleNum) if cleanNumbers(UncleanNum)]

df = df[df.telephone.isin(v)]

编辑:

经过一些测试解决方案应该被简化,因为函数返回 bool 值:

df1 = df[df['telephone'].apply(cleanNumbers)]

关于python - 如何加速 pandas drop() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57392878/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com