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

如何合并多子目录中JSON格式txt数据生成pandas DataFrame

多子目录JSON数据合并为Pandas DataFrame实现方案

现有代码存在的问题

  • 缺少必要依赖导入:未导入pandas、json库,运行会直接报错
  • 已弃用API:DataFrame.append()方法在pandas 2.0+版本已被移除,运行会触发报错
  • 性能较差:循环中反复拼接DataFrame会产生大量中间对象,数据量较大时效率极低
  • 路径匹配逻辑冗余:两次遍历目录可以合并优化

优化后实现代码

单文件名全局合并版本

如果所有匹配*application_data.txt规则的文件结构一致,直接合并为一个DataFrame即可使用:

import json
import pandas as pd
from pathlib import Path

# 定义根目录路径
root_dir = Path('/content/gdrive/MyDrive/fd249093-60d2-4d4f-99d0-3e98954f7711')

# 一次性递归匹配所有符合规则的文件,无需分两次遍历
all_data = []
for file_path in root_dir.rglob('*application_data.txt'):
    # 可根据需求去掉该判断,保留则会跳过根目录下直接存储的匹配文件
    if file_path.parent == root_dir:
        continue
    with open(file_path, 'r', encoding='utf-8') as fp:
        json_data = json.load(fp)
        all_data.extend(json_data)

# 一次性生成最终DataFrame,性能远高于循环拼接
app_data = pd.DataFrame(all_data)

按文件名分组生成多DataFrame版本

如果需要保留原有代码按不同文件名分别生成独立DataFrame的逻辑,可以使用以下版本:

import json
import pandas as pd
from pathlib import Path
from collections import defaultdict

root_dir = Path('/content/gdrive/MyDrive/fd249093-60d2-4d4f-99d0-3e98954f7711')
data_by_filename = defaultdict(list)

for file_path in root_dir.rglob('*application_data.txt'):
    if file_path.parent == root_dir:
        continue
    file_name = file_path.name
    with open(file_path, 'r', encoding='utf-8') as fp:
        json_data = json.load(fp)
        data_by_filename[file_name].extend(json_data)

# 所有文件名对应的DataFrame存储在字典中,key为文件名,value为对应合并后的DataFrame
df_dict = {file_name: pd.DataFrame(data) for file_name, data in data_by_filename.items()}

优化点说明

  • 路径匹配更简洁:用rglob递归遍历所有子目录,一次性拿到所有符合命名规则的文件,减少冗余循环
  • 性能提升显著:用列表临时存储所有JSON数据,最后一次性生成DataFrame,避免了循环拼接的性能开销
  • 兼容高版本pandas:不再使用已弃用的append方法
  • 兼容性更好:显式指定文件读取编码为utf-8,避免部分特殊字符场景下的读取报错

内容的提问来源于stack exchange,提问作者Abhishek Kaushik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:54:03