如何正确合并两个默认索引的Pandas DataFrame,避免额外索引列?
问题描述
有如下简化示例数据:
list = [ { "age": 1234, "val": 0.5, "val2": 0.2 }, { "age": 1234, "val": 0.2, "val2": 0.8 }, ]
通过frame = pandas.DataFrame(list)创建Pandas DataFrame,会生成0到len(list)-1的默认索引,DataFrame如下:
age val val2 0 1234 0.5 0.2 1 1234 0.2 0.8
随后通过frame.to_csv('file.csv')将其保存为CSV文件。现在需要创建另一个完全相同的DataFrame,加载旧DataFrame后将两者合并,使新数据排在旧数据之后,且索引从0重新连续编号。尝试使用pd.concat([old_frame, new_frame], ignore_index=True)合并后,数据出现了两列索引:
age val val2 0 0 1234 0.5 0.2 1 1 1234 0.2 0.8
请问如何正确合并这两个DataFrame,避免每次合并都产生额外的索引列?
解决方法
问题根源是保存CSV时默认写入了原DataFrame的索引,加载时该索引被当作普通数据列保留,导致合并后出现双重索引。按以下步骤处理即可解决:
保存CSV时排除索引
原代码frame.to_csv('file.csv')会默认把索引写入CSV,修改为以下代码,避免生成额外的索引列:frame.to_csv('file.csv', index=False)加载已有带索引的CSV文件
如果已经生成了带索引的CSV,加载时需指定将原索引列恢复为DataFrame的索引,而非数据列:old_frame = pd.read_csv('file.csv', index_col=0)或者直接忽略加载时的索引列(不保留原索引):
old_frame = pd.read_csv('file.csv', index_col=False)合并DataFrame
确保两个DataFrame都没有多余的索引列后,执行合并操作:combined_frame = pd.concat([old_frame, new_frame], ignore_index=True)此时合并后的DataFrame会生成从0开始的连续单一索引,无额外索引列。
内容的提问来源于stack exchange,提问作者Arkadiusz Galler
相关产品推荐
相关产品推荐

