Python3运行代码提示'NoneType'对象无'append'属性是什么原因?
问题原因
- 核心报错原因有两种可能:
- 你使用的pandas版本为2.0及以上版本,该版本已经正式移除了
DataFrame.append()方法,调用该方法会直接返回None,第一次循环赋值后extracted_data就会被覆盖为None,下一次循环调用None.append就会抛出该错误; - 你自定义的
extract_from_json函数没有显式返回合法的DataFrame对象,默认返回None,旧版本pandas的append方法接收None作为参数后会返回None,同样会导致extracted_data被赋值为空,触发后续报错。
- 你使用的pandas版本为2.0及以上版本,该版本已经正式移除了
- 附加语法错误:你代码中的
return extract缩进位置错误,完全处于extract()函数定义的外部,不会被当作函数返回逻辑执行;同时你返回的是extract函数对象本身,而非你处理得到的extracted_data变量,就算没有前面的报错,调用函数也拿不到预期的处理结果。 - 逻辑小问题:
glob.glob('file_1.json')只会匹配文件名完全为file_1.json的文件,循环最多执行一次,如果你是要匹配同前缀的多份json文件,应该把匹配规则修改为file_*.json这类带通配符的格式。
修复方案
建议使用pd.concat替代已经废弃的append方法,同时修正缩进和返回值,参考代码如下:
import pandas as pd import glob # 注意保证你自定义的extract_from_json函数正常返回DataFrame格式的结果 def extract_from_json(file_path): # 这里是你原有extract_from_json的实现逻辑 pass def extract(): extracted_data = pd.DataFrame(columns = ['Name','Last']) for jsonfile in glob.glob('file_*.json'): # 按需调整匹配规则 temp_df = extract_from_json(jsonfile) # 用concat替代废弃的append方法 extracted_data = pd.concat([extracted_data, temp_df], ignore_index = True) # 修正缩进和返回值 return extracted_data
内容的提问来源于stack exchange,提问作者Markie Romano
相关产品推荐
相关产品推荐

