如何将多个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
相关产品推荐
相关产品推荐

