解决DataFrame应用函数时'Series' object has no attribute 'tax_code'错误
问题解决方法
错误原因
你遇到的'Series' object has no attribute 'tax_code'错误,本质是两个核心问题:
df.apply(valid)默认按列处理数据(axis=0),此时传入valid的参数是列对应的Series,而你在函数里错误直接引用全局df的tax_code列,且误用了库的方法调用逻辑。codicefiscale.is_valid()是需要传入单个税号字符串的独立函数,并非Series的属性方法。
修正后的代码
步骤1:正确定义验证函数
把库的导入放在函数外部(避免重复导入),让函数接收每行数据作为参数,提取对应tax_code值后验证:
from codicefiscale import codicefiscale def valid(row): # 从当前行提取tax_code字段值 tax_code = row['tax_code'] # 调用库的验证函数判断有效性 if codicefiscale.is_valid(tax_code): return "It's Valid" else: return "Not Valid"
步骤2:指定axis=1执行apply
通过axis=1让apply按行处理数据,将每行作为参数传入valid函数:
df["Is Valid"] = df.apply(valid, axis=1)
更高效的简化写法(可选)
如果数据量较大,逐行apply效率偏低,可以直接对tax_code列做元素级处理:
from codicefiscale import codicefiscale df["Is Valid"] = df['tax_code'].apply( lambda x: "It's Valid" if codicefiscale.is_valid(x) else "Not Valid" )
这种写法直接针对tax_code列的每个字符串验证,代码更简洁且执行效率更高。
内容的提问来源于stack exchange,提问作者Lomba
相关产品推荐
相关产品推荐

