Pandas合并多个CSV文件出现Unnamed列、首行丢失该如何解决?
多相同格式CSV合并问题修复方案
问题根因
你遇到的首行丢失、出现Unnamed列或列名0的问题,核心是读入CSV时没有正确配置列名和索引参数,导致拼接时列匹配异常:
- 未指定
index_col=0时,A列的索引会被识别为普通数据列,列名不匹配时pandas自动生成Unnamed列补全 header参数配置和实际CSV结构不符时,第一个CSV的表头会被设为列名,后续CSV的表头会被当成普通数据行处理,导致首行丢失- 循环读入时未将每个DataFrame存入列表,直接拼接会出现数据覆盖或列对齐错误
修复代码
根据你的CSV是否带有表头选择对应代码即可:
情况1:所有CSV第一行是表头(例如第一行内容为索引,数值)
import pandas as pd import glob # 存储所有读入的DataFrame df_list = [] for f in glob.glob('C:/~/*.csv'): # header=0 用第一行作为列名,index_col=0 用第一列作为索引 df = pd.read_csv(f, header=0, index_col=0) df_list.append(df) # 按行拼接所有DataFrame,ignore_index设为True可重置全局索引,设为False保留原有索引 combined_df = pd.concat(df_list, axis=0, ignore_index=False) # 导出合并结果,utf-8-sig编码兼容Excel打开乱码问题 combined_df.to_csv('C:/~/combined_result.csv', index=True, encoding='utf-8-sig')
情况2:所有CSV没有表头,第一行直接是索引+数值数据
import pandas as pd import glob df_list = [] for f in glob.glob('C:/~/*.csv'): # header=None 不把第一行设为表头,手动指定列名避免出现列名`0` df = pd.read_csv(f, header=None, index_col=0, names=['索引', '数值']) df_list.append(df) combined_df = pd.concat(df_list, axis=0, ignore_index=False) combined_df.to_csv('C:/~/combined_result.csv', index=True, encoding='utf-8-sig')
注意事项
如果需要删除重复索引,可在拼接完成后加一行代码:combined_df = combined_df[~combined_df.index.duplicated(keep='first')]
内容的提问来源于stack exchange,提问作者user16451725
相关产品推荐
相关产品推荐

