多文件夹JSON文件合并为DataFrame报错:ValueError问题求助
问题分析与解决方案
问题根源
- 文件路径错误:
os.walk循环中你用path作为循环变量,覆盖了初始定义的根路径;且读取文件时仅传入文件名file,未拼接当前文件夹的完整路径,导致pd.read_json无法定位到正确文件,或读取到无效内容触发ValueError。 - DataFrame未初始化:首次执行
df.append时df未定义,会引发未定义错误(若路径问题先触发报错则不会走到这一步)。 append方法已废弃:Pandas 2.0+已移除append方法,官方推荐使用pd.concat替代。- 潜在JSON格式问题:部分JSON文件可能为空、格式不规范,也会触发该报错。
修正后的代码
import os import pandas as pd # 根路径单独存储,避免被循环变量覆盖 root_path = r'C:\Users\Blank\OneDrive\Desktop\AFND\Dataset' df_collection = [] # 用列表暂存每个JSON的DataFrame,最后统一合并 for dirpath, _, filenames in os.walk(root_path): for file in filenames: if file.endswith(".json"): # 拼接完整文件路径 full_file = os.path.join(dirpath, file) try: # 读取JSON并加入列表 temp_df = pd.read_json(full_file) df_collection.append(temp_df) except ValueError as e: print(f"读取失败:{full_file},错误:{e}") continue # 合并所有有效DataFrame if df_collection: final_df = pd.concat(df_collection, ignore_index=True) else: print("未找到可读取的有效JSON文件")
关键优化点
- 用
root_path存储根路径,避免被os.walk的dirpath变量覆盖。 - 通过
os.path.join拼接完整文件路径,确保能准确找到目标文件。 - 采用列表收集DataFrame后用
pd.concat合并,效率更高且符合新版Pandas规范。 - 加入
try-except捕获单个文件的读取错误,避免脚本整体崩溃,同时打印错误文件路径方便排查。
内容的提问来源于stack exchange,提问作者Hiss
相关产品推荐
相关产品推荐

