pandas垂直拼接dataframe报Reindexing only valid with uniquely valued Index错误如何解决
pandas垂直拼接InvalidIndexError错误修复方案
错误根源
你报错的核心原因是aaaaa_tmp_df存在重复列名:你给它设置列名时,最后两列都命名为了Tilt_X,导致这个DataFrame的列索引不唯一。pandas做垂直拼接时会先对齐列,遇到不唯一的索引对象就会抛出Reindexing only valid with uniquely valued Index objects错误。
此外两个待拼接的DataFrame列名不匹配(aaaaa_tmp_df最后两列都是Tilt_X,bbb_tmp_df最后两列是Tilt_X和Tilt_Y),就算不报错拼接结果也不符合预期,你给出的预期结果表头最后两列都是Tilt_X属于笔误,实际值对应Tilt_X和Tilt_Y。
修复方法
直接修正aaaaa_tmp_df的列名定义,把最后一个重复的Tilt_X改为Tilt_Y,保证两个待拼接的DataFrame列名完全一致、且无重复列名即可。
修正后核心代码
# 仅修改aaaaa_tmp_df的列名定义部分即可 aaaaa_tmp_df.columns=['TimeStamp', 'Input', 'X', 'Y', 'Time', 'Distance', 'Speed', 'Pressure', 'Tilt_X', 'Tilt_Y'] # 把原来的Tilt_X改为Tilt_Y bbb_tmp_df.columns=['TimeStamp', 'Input', 'X', 'Y', 'Time', 'Distance', 'Speed', 'Pressure', 'Tilt_X', 'Tilt_Y'] aaaaa = aaaaa_tmp_df[aaaaa_tmp_df['Input'] == 'aaaaa'] bbb = bbb_tmp_df[bbb_tmp_df['Input'] == 'bbb'] # 如果要保留原来的行号(16、17、26这类),把ignore_index改为False即可 all_df = pd.concat([aaaaa,bbb],axis = 0, ignore_index=True)
额外排查点
你报错日志里的拼接是三个对象pd.concat([touch,pen,ptp],axis = 0, ignore_index=True),如果修改后还报错,检查另外两个DataFrame是否也存在重复列名、列名不匹配的问题即可。
内容的提问来源于stack exchange,提问作者CHL
相关产品推荐
相关产品推荐

