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

如何用Python合并多CSV文件并将文件名设为首列(含行筛选)

解决方案

你的代码问题在于没有把文件名和对应的CSV数据绑定在一起——循环里反复给df['col1']赋值只会保留最后一个文件名,而且后续合并时也没把这个列加到每个CSV的DataFrame里。另外你还需要实现只提取每个CSV的1-250行的需求,同时处理不同CSV列数不一致的情况(pandas会自动对齐列,缺失值补NaN)。

修改后的代码如下:

import glob
import pandas as pd
import os

# 指定CSV文件路径
path = "C:/Users/Staylor/Documents/Python test"
file_list = glob.glob(path + "/*.csv")

merged_data = []

for file_path in file_list:
    # 只读取前250行数据
    df = pd.read_csv(file_path, nrows=250)
    # 在首列插入文件名(仅保留文件名,去掉全路径)
    df.insert(0, "文件名", os.path.basename(file_path))
    merged_data.append(df)

# 合并所有DataFrame,自动对齐不同列的CSV
excl_merged = pd.concat(merged_data, ignore_index=True)

# 导出到Excel
excl_merged.to_excel('total_python.xlsx', index=False)

关键修改点说明:

  • 绑定文件名与数据:每个CSV读取后立即插入文件名列,确保每一行数据都对应正确的源文件名称,避免后续合并时丢失关联。
  • 限制读取行数:通过pd.read_csv的nrows=250参数直接读取前250行,比读取全部数据后再切片更高效。
  • 处理列不一致:使用pd.concat合并数据(替代已弃用的append方法),它会自动对齐不同CSV的列,缺失的列将填充NaN。
  • 优化文件名显示:用os.path.basename()提取纯文件名,避免首列显示冗长的全路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:40:09