Pandas断言报错TypeError: boolean value of NA is ambiguous求助
错误信息
tests/test_flatten_rates_etl.py:153: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pandas/_libs/testing.pyx:52: in pandas._libs.testing.assert_almost_equal ??? pandas/_libs/testing.pyx:159: in pandas._libs.testing.assert_almost_equal ??? pandas/_libs/testing.pyx:105: in pandas._libs.testing.assert_almost_equal ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > ??? E TypeError: boolean value of NA is ambiguous pandas/_libs/missing.pyx:388: TypeError
需求
我需要帮助找到包含NA的列,或者指出实际问题并说明修复方法。
PDB会话记录
(Pdb) actual_df.select_dtypes(include=["bool", "boolean", bool]) service_level__is_trackable service_level__available_shippo object_custom_logic_applied is_trackable includes_insurance available_shippo address_from__is_residential address_from__validate address_to__is_residential address_to__validate address_return__is_residential address_return__validate shipment__bi_state_is_test 0 True False True False False False False False False False False False False 1 True True True False False False False False False False False False False 2 True True True False False False False False False False False False False 3 True True True False False False False False False False False False False (Pdb) expected_df.select_dtypes(include=["bool", "boolean", bool]) service_level__is_trackable service_level__available_shippo object_custom_logic_applied is_trackable includes_insurance available_shippo address_from__is_residential address_from__validate address_to__is_residential address_to__validate address_return__is_residential address_return__validate shipment__bi_state_is_test 0 True False True False False False False False False False False False False 1 True True True False False False False False False False False False False 2 True True True False False False False False False False False False False 3 True True True False False False False False False False False False False (Pdb) assert_frame_equal(actual_df, expected_df, check_like=True) *** TypeError: boolean value of NA is ambiguous
排查与修复建议
全面检查所有列的NA值
你仅排查了布尔类型列,但报错可能来自其他类型列(如数值型、object型)中混入的NA。执行以下命令定位所有含NA的列:# 统计actual_df各列NA数量 actual_df.isna().sum() # 统计expected_df各列NA数量 expected_df.isna().sum()校验列的数据类型一致性
即使列值视觉上一致,数据类型不匹配也可能触发问题(比如某列在actual_df是带NaN的float型,expected_df是int型)。执行以下命令对比两表列类型:pd.DataFrame({'actual_dtype': actual_df.dtypes, 'expected_dtype': expected_df.dtypes})调整断言参数规避问题
如果确认NA是预期存在的,可修改assert_frame_equal的参数:assert_frame_equal(actual_df, expected_df, check_like=True, na_equal=True, check_less_precise=True)na_equal=True:将两个NA视为相等check_less_precise=True:放宽数值比较的精度要求,避免微小差异触发报错
内容的提问来源于stack exchange,提问作者AlexLordThorsen
相关产品推荐
相关产品推荐

