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

如何使用pandas处理多CSV文件时将各文件输出记录单独存为不同行

Pandas多CSV文件按文件为单位合并实现

原有实现

你当前使用的代码会将所有CSV的行纵向拼接,最终行数等于所有CSV的行数总和:

folder_name = 'Dataset_test'
file_type = 'csv'
seperator =','
df = pd.concat([pd.read_csv(f, sep=seperator) for f in glob.glob(folder_name + "/*."+file_type)],ignore_index=True)

改造方案

要实现1个CSV对应最终DataFrame的1行,可以参考以下两种常用实现:

方案1:全量内容序列化存储

适合需要保留CSV原始结构,后续可能需要恢复单个CSV数据的场景:

import pandas as pd
import glob

folder_name = 'Dataset_test'
file_type = 'csv'
seperator =','
csv_files = glob.glob(folder_name + "/*."+file_type)

row_list = []
for file_path in csv_files:
    tmp = pd.read_csv(file_path, sep=seperator)
    row_list.append({
        # 保留文件名做标识,可按需删除
        "file_name": file_path.split("/")[-1],
        # 将CSV全量内容转为JSON字符串存储
        "csv_raw_data": tmp.to_json(orient="records", force_ascii=False)
    })

# 生成最终结果,行数等于CSV文件数量
final_df = pd.DataFrame(row_list)

方案2:同列聚合为列表存储

适合需要直接对单个CSV的列做统计计算的场景:

import pandas as pd
import glob

folder_name = 'Dataset_test'
file_type = 'csv'
seperator =','
csv_files = glob.glob(folder_name + "/*."+file_type)

row_list = []
for file_path in csv_files:
    tmp = pd.read_csv(file_path, sep=seperator)
    # 每列的所有值聚合为列表,生成单条记录
    row_data = tmp.agg(list).to_dict()
    row_data["file_name"] = file_path.split("/")[-1]
    row_list.append(row_data)

final_df = pd.DataFrame(row_list)

说明

  • 方案1存储的csv_raw_data字段可通过pd.read_json(final_df.loc[0, 'csv_raw_data'])恢复为对应CSV的原始DataFrame
  • 方案2的每个列字段都是列表类型,可直接使用apply类方法做均值、计数等统计计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:15:03