首页 > 解决方案 > 在python中使用带有apply的自定义函数时出现IndexingError

问题描述

我需要从我的数据中验证电话号码是否有效。我在 python 中使用电话号码库

我创建了一个有效的 for 循环,但它太慢了,所以我试图在 apply 函数中使用相同的 for 循环,但出现索引错误


    for i in range(len(df)):

        num = df.loc[i,'Primary Phone #']
        region = df.loc[i,'Override Address Country']
        try:
            output = phonenumbers.parse(num, region=region)
        except phonenumbers.NumberParseException:
            df.loc[i,'validation'] = False
        else:
            df.loc[i,'validation'] = phonenumbers.is_valid_number(output)

temp_data.apply(number_validation,轴 = 0/1)

IndexingError: ('Too many indexers', '发生在索引工单代码')

标签: python-3.xpandasapply

解决方案


我可能会apply像您尝试的那样使用 ,但请确保提供参数:

def verify_number(x):
    return phonenumbers.parse(
        x['Primary Phone #'],
        region=x['Override Address Country']
    )

df.apply(verify_number, axis=1)

如果这仍然太慢,您可以考虑使用 和 来提高性能,Cython如pandas用户指南中所述。Numbapandas.eval()


推荐阅读