pd.concat拼接多DataFrame时报Reindexing only valid错误如何解决
报错根因
你遇到的Reindexing only valid with uniquely valued Index objects报错本质不是多DataFrame间索引不一致,而是至少有一个DataFrame内部存在重复的行索引,pandas执行concat对齐操作时无法对非唯一索引做重索引,因此抛出异常。
快速排查代码(无显式循环)
- 检测dfList中是否存在带重复索引的DataFrame:
pd.Series([df.index.is_unique for df in dfList]).any()
返回True即说明存在符合上述特征的问题DataFrame。 - 定位所有问题DataFrame在列表中的下标:
problem_idx = [i for i, df in enumerate(dfList) if not df.index.is_unique]
无循环自动化拼接方案
根据你的业务需求二选一即可:
不需要保留原行索引(索引为默认序号无业务意义)
直接在concat参数中开启索引重置即可,一行代码完成150个DataFrame拼接:df = pd.concat(dfList, ignore_index=True)需要保留原行索引
给每个源DataFrame额外增加一级区分索引,避免全局索引重复问题,同时完整保留原有索引信息:df = pd.concat(dfList, keys=range(len(dfList)), names=['source_df_seq', 'original_index'])
如果是横向拼接(按列对齐,axis=1)且确认所有DataFrame的行顺序完全一致,可使用如下代码:df = pd.concat([df.reset_index(drop=True) for df in dfList], axis=1).set_index(dfList[0].index)
内容的提问来源于stack exchange,提问作者Isaac
相关产品推荐
相关产品推荐

