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

如何将多个CSV列头合并至DataFrame并添加源文件名列?解决赋值异常问题

解决CSV列头合并时文件名列仅保留最后一个文件的问题

问题原因

你的代码里df_headers['file_name'] = f这行逻辑有误:每次循环都会把整个df_headers的file_name列全部覆盖为当前遍历的文件名,循环结束后自然只剩最后一个文件的名称。

修正后的代码

# import necessary libraries
import pandas as pd
import os
import glob

# use glob to get all the csv files in the folder
path = 'C:\\Users\\'
csv_files = glob.glob(os.path.join(path, "*.csv"))

df_headers = pd.DataFrame()

# loop over the list of csv files
for f in csv_files:
    # 仅读取表头行
    df = pd.read_csv(f, nrows=1)
    # 先给当前文件的表头数据添加文件名列(仅作用于当前df)
    df['file_name'] = os.path.basename(f)
    # 合并到总DataFrame,重置索引避免重复
    df_headers = pd.concat([df_headers, df], axis=0, ignore_index=True)

# 输出结果,不写入索引列
df_headers.to_csv('C:\\Users\\ryans\\Desktop\\out.csv', index=False)

关键修改点

  • 将文件名列的赋值移到concat之前:确保每个文件的表头数据只绑定自身的文件名,不会覆盖已有记录
  • 使用os.path.basename(f):提取纯文件名(而非完整路径),结果更简洁
  • 添加ignore_index=True:合并后自动重置索引,避免出现重复索引
  • 输出时加index=False:防止索引列被写入结果CSV

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:37:12