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

如何用Pandas合并含空文件的CSV列表并添加文件名列?

解决CSV合并的三个问题:跳过空文件、高效合并、添加来源文件名

以下是优化后的代码,同时满足你提到的所有需求:

import pandas as pd
import os
from glob import glob

folder = r'C:\Users\_M92\Desktop\myFolder'

# 仅匹配文件夹下的CSV文件,避免处理非CSV格式文件
csv_files = glob(os.path.join(folder, '*.csv'))

def read_csv_with_source(file_path):
    try:
        df = pd.read_csv(file_path, delimiter=';')
        # 新增列存储当前数据对应的源文件名
        df['source_file'] = os.path.basename(file_path)
        return df
    except pd.errors.EmptyDataError:
        # 捕获空文件异常,返回None跳过该文件
        return None

# 过滤空文件对应的None值,合并有效DataFrame并重置索引
df_combined = pd.concat(
    [df for df in map(read_csv_with_source, csv_files) if df is not None],
    ignore_index=True
)

display(df_combined)

核心细节说明:

  • 跳过空文件:通过try-except捕获pd.errors.EmptyDataError,遇到空文件时返回None,最后合并阶段过滤掉这些无效值。
  • 高效合并:
    • 用glob替代os.listdir,直接筛选.csv后缀文件,避免处理文件夹内的无关文件;
    • 使用map+生成器表达式,避免一次性将所有文件加载到列表,节省内存(尤其文件数量多、体积大时);
    • 加ignore_index=True重置合并后的索引,避免原文件索引重复导致的混乱。
  • 添加来源文件名:读取每个文件后新增source_file列,用os.path.basename提取纯文件名(不带路径),方便后续追溯数据来源。

如果你的CSV文件体积极大,还可以进一步优化为分块读取模式,但常规场景下上述代码已足够简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:57:15