pandas拼接两个DataFrame转字典后转回仅保留单个原表问题
问题成因
- 首先是代码逻辑错误:你执行了
opel_Concat.to_dict()但未将返回的字典结果赋值给opel_Dict变量,后续调用的opel_Dict大概率是之前预先生成的、仅包含df数据的旧变量,因此转回DataFrame后仅保留了df的内容。 - 第二个常见隐藏诱因:如果两个原始DataFrame存在重复行索引,
to_dict()默认以索引为key存储数据,同索引的行数据会发生覆盖,最终也会导致拼接后的数据丢失。例如df的索引范围是0N,df2的索引范围是04327,拼接后索引重复,转字典时后写入的同索引数据会覆盖先写入的内容,仅保留部分数据。
解决方法
- 修正变量赋值逻辑,同时拼接时重置索引避免重复:
# 拼接两个df,ignore_index=True会重置全局行索引,避免索引重复 opel_Concat = pd.concat([df,df2], ignore_index=True) # 把转字典的结果正确赋值给opel_Dict opel_Dict = opel_Concat.to_dict() # 转回DataFrame opel_Df = pd.DataFrame.from_dict(opel_Dict)
- 如果你需要保留原始的行索引,可以调整转字典的格式参数,按行存储避免索引覆盖:
opel_Concat = pd.concat([df,df2]) # orient='records'会把每行转为一个字典,整体存储为列表,不受重复索引影响 opel_Dict = opel_Concat.to_dict(orient='records') # 直接传入字典列表生成DataFrame opel_Df = pd.DataFrame(opel_Dict)
- 转换完成后可以执行
print(opel_Df.shape)校验结果,确认行数等于df与df2的行数之和,列数与拼接后的列数一致即可。
内容的提问来源于stack exchange,提问作者user12722902
相关产品推荐
相关产品推荐

