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

Python基础:如何修改批量处理代码获取全部DataFrame?

解决方法

你的核心问题是循环内使用return会直接终止函数,导致只返回第一个处理后的DataFrame。而你尝试concat没成功,大概率是没先把所有DataFrame收集起来再合并,而是在循环里错误地调用了concat。

下面是两种可行的修改方案:

方案一:返回合并后的单个大DataFrame(适合后续统一处理)

先创建一个空列表存储每个JSON文件生成的DataFrame,循环结束后用pd.concat合并所有数据:

import pandas as pd
import os

def all_data(dir_path):
    df_collection = []
    # 遍历目录下的所有文件
    for filename in os.listdir(dir_path):
        if filename.endswith(".json"):
            file_path = os.path.join(dir_path, filename)
            # 读取JSON并转为DataFrame
            df = pd.read_json(file_path)
            # 处理CSV导出(按需保留)
            df.to_csv(f"{os.path.splitext(filename)[0]}.csv", index=False)
            # 将当前DataFrame加入集合
            df_collection.append(df)
    # 合并所有DataFrame,ignore_index重置索引避免重复
    if df_collection:
        return pd.concat(df_collection, ignore_index=True)
    # 没有JSON文件时返回空DataFrame
    return pd.DataFrame()

方案二:返回所有DataFrame的列表(适合单独处理每个文件的数据)

如果需要后续对每个文件的DataFrame做单独操作,直接返回存储所有DataFrame的列表即可:

import pandas as pd
import os

def all_data(dir_path):
    df_list = []
    for filename in os.listdir(dir_path):
        if filename.endswith(".json"):
            file_path = os.path.join(dir_path, filename)
            df = pd.read_json(file_path)
            df.to_csv(f"{os.path.splitext(filename)[0]}.csv", index=False)
            df_list.append(df)
    return df_list

为什么之前的concat没生效?

如果之前你把pd.concat写在循环内部,每次循环只会合并当前DF和之前的,但最后返回的还是循环里的return,或者只保留了最后一次合并的结果。必须先把所有DF收集到列表,在循环结束后再执行合并操作。

使用示例

  • 方案一使用:
# 获取合并后的大DataFrame
final_df = all_data("./your_json_directory")
# 后续统一处理,比如筛选、统计
print(final_df.describe())
  • 方案二使用:
# 获取所有DataFrame的列表
df_list = all_data("./your_json_directory")
# 遍历处理每个DF
for idx, df in enumerate(df_list):
    print(f"第{idx+1}个文件的数据:")
    print(df.head())
# 也可以自己手动合并
combined_df = pd.concat(df_list, ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 11:12:40