如何合并DataFrame列表:仅保留首个表头移除其余表头
问题解答
合并后是否会出现多个表头?
会的。原因是你调用pd.read_csv()时指定了header=None,这会让pandas把CSV文件的第一行(原本是表头)当作普通数据行加载到DataFrame里。每个CSV的表头都被当成数据行存入列表中的DataFrame,合并后自然就会出现多组重复的“表头行”。
如何仅保留首个表头并移除其余?
有两种处理方式,推荐从读取阶段修正,更高效:
方式一:读取时正确识别表头(推荐)
直接去掉pd.read_csv()里的header=None参数(pandas默认会把CSV第一行作为表头,等价于header=0),这样读取后的每个DataFrame都会用原CSV的表头作为列名,数据行从第二行开始,合并后就不会有重复表头了:
path = "..." all_files = glob.glob(path + "*.csv") li = [] for filename in all_files: # 不再指定header=None,自动识别第一行为表头 df = pd.read_csv(filename, index_col=None) li.append(df) # 合并所有DataFrame并重置索引 combined_df = pd.concat(li, ignore_index=True)
方式二:已读取完列表后再处理
如果已经按原代码读取了DataFrame列表,可以在合并后清理重复的表头行:
# 先合并所有DataFrame combined_df = pd.concat(li, ignore_index=True) # 提取第一个表头行的内容 header_content = combined_df.iloc[0] # 将这行内容设为合并后DataFrame的列名 combined_df.columns = header_content # 过滤掉所有和表头内容完全一致的行,重置索引 combined_df = combined_df[~combined_df.apply(lambda row: row.equals(header_content), axis=1)].reset_index(drop=True)
内容的提问来源于stack exchange,提问作者Akansha
相关产品推荐
相关产品推荐

