如何解决parquet读取与JSON生成的DataFrame比对相等时的索引报错问题
问题原因
报错核心是两个DataFrame的索引类型不一致:
- 左侧从parquet文件加载的索引是数值类型的
RangeIndex - 右侧从JSON生成的索引是字符串类型的
object索引
二者字面取值看起来一致但类型不同,因此全等校验不通过。
解决方法
方法1:校验时忽略索引类型校验(最简便)
直接在校验函数中添加check_index_type=False参数,不需要修改原DataFrame:
pd.testing.assert_frame_equal(de_df.head(), pd.DataFrame(expected_de_json), check_index_type=False)
如果连索引取值都不需要校验,还可以追加check_index=False参数。
方法2:统一右侧索引类型为数值型
将右侧DataFrame的索引转为整型,和左侧保持一致后再校验:
right_df = pd.DataFrame(expected_de_json) right_df.index = right_df.index.astype(int) pd.testing.assert_frame_equal(de_df.head(), right_df)
方法3:仅校验内容匹配,忽略索引顺序
如果只需要确认列内容完全一致,不需要关心索引的顺序和类型,可以添加check_like=True参数:
pd.testing.assert_frame_equal(de_df.head(), pd.DataFrame(expected_de_json), check_like=True)
内容的提问来源于stack exchange,提问作者caasswa
相关产品推荐
相关产品推荐

