Pandas中ne方法对比相同DataFrame时出现True的原因排查
排查DataFrame对比中erp_factor列返回True的问题
以下是几种常见原因及对应的排查、解决方法:
数据类型不匹配:数值外观一致但类型不同(比如int和float、字符串和数值)会导致
ne判定为不等。
排查:执行print(dataframe1['erp_factor'].dtype, dataframe2['erp_factor'].dtype)查看类型差异
解决:统一列类型,例如dataframe1['erp_factor'] = dataframe1['erp_factor'].astype(float)浮点数精度误差:浮点型数据可能因二进制存储特性存在肉眼不可见的精度差(比如0.1+0.2≠0.3)。
排查:直接打印具体值或计算差值:print(dataframe1.loc[1, 'erp_factor'], dataframe2.loc[1, 'erp_factor']) print(dataframe1.loc[1, 'erp_factor'] - dataframe2.loc[1, 'erp_factor'])解决:用精度容忍的方式对比,替换原代码:
import numpy as np df1_dedup = dataframe1.drop_duplicates(keep="first").reset_index(drop=True) df2_dedup = dataframe2.drop_duplicates(keep="first").reset_index(drop=True) neDF = ~np.isclose(df1_dedup['erp_factor'], df2_dedup['erp_factor'])字符串含隐藏字符:字符串类型可能存在空格、换行符、全角/半角差异等肉眼不可见的字符。
排查:用repr显示原始字符串:print(repr(dataframe1.loc[1, 'erp_factor']), repr(dataframe2.loc[1, 'erp_factor']))解决:清洗字符串,例如
dataframe1['erp_factor'] = dataframe1['erp_factor'].str.strip()去重后行匹配错误:两个DataFrame的重复项分布不同,导致去重后的第2行对应原数据的不同记录。
排查:直接打印去重后对应位置的值:print(dataframe1.drop_duplicates(keep="first")['erp_factor'].iloc[1]) print(dataframe2.drop_duplicates(keep="first")['erp_factor'].iloc[1])
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

