You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多文件夹JSON文件合并为DataFrame报错:ValueError问题求助

问题分析与解决方案

问题根源

  1. 文件路径错误:os.walk循环中你用path作为循环变量,覆盖了初始定义的根路径;且读取文件时仅传入文件名file,未拼接当前文件夹的完整路径,导致pd.read_json无法定位到正确文件,或读取到无效内容触发ValueError。
  2. DataFrame未初始化:首次执行df.append时df未定义,会引发未定义错误(若路径问题先触发报错则不会走到这一步)。
  3. append方法已废弃:Pandas 2.0+已移除append方法,官方推荐使用pd.concat替代。
  4. 潜在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 19:25:20