Pandas numpy 处理 Nan
Pandas numpy handling Nan
我有一个 pandas 数据框,我在其中使用 numpy 库来确定两列中的值是否相同。我 运行 遇到问题,这些列中的值是 blank/NaN 并且数据框报告它们是不同的,尽管它们都显示为 NaN。
进行此分析时处理 NaN 的最佳方法是什么?
我有两个文件加载到数据帧中,然后我将两个文件合并到一个唯一的键上到数学数据帧中,然后执行以下操作来查找差异:
merged = pd.merge(left= df_price_source, right=df_price_secondary, on=['ACCT'], indicator=True, how='inner')
matched = merged[merged['_merge'] == 'both'].copy()
matched['date_comparison'] = np.where(matched["Start Date_x"] == matched["Start Date_y"], True, False)
matched['profit_comparison'] = np.where(matched["profit_x"] == matched["profit_y"], True, False)
对于这些匹配['date_comparison'] 和匹配[profit_comparison'] 的新列,我在 NaN 列中看到 False,但我希望是 True。
查找 numpy.NaN 我找到了这个 SO answer。
在比较 2 NaN
时,where 方法中的条件导致 False
numpy.NaN == numpy.NaN
> False
要检查两者是否都是 NaN,您可以使用:
numpy.NaN is numpy.NaN
> True
您需要将 is 检查添加到条件中以识别 2 NaN:
(matched["Start Date_x"] == matched["Start Date_y"]) or \
(matched["Start Date_x"] is matched["Start Date_y"])
您还可以使用 Set 来检查相等性而不是 2 个条件,因为它也适用于 NaN:
len({np.NaN, np.NaN}) == 1
> True
len({matched["Start Date_x"], matched["Start Date_y"]}) == 1
我有一个 pandas 数据框,我在其中使用 numpy 库来确定两列中的值是否相同。我 运行 遇到问题,这些列中的值是 blank/NaN 并且数据框报告它们是不同的,尽管它们都显示为 NaN。 进行此分析时处理 NaN 的最佳方法是什么?
我有两个文件加载到数据帧中,然后我将两个文件合并到一个唯一的键上到数学数据帧中,然后执行以下操作来查找差异:
merged = pd.merge(left= df_price_source, right=df_price_secondary, on=['ACCT'], indicator=True, how='inner')
matched = merged[merged['_merge'] == 'both'].copy()
matched['date_comparison'] = np.where(matched["Start Date_x"] == matched["Start Date_y"], True, False)
matched['profit_comparison'] = np.where(matched["profit_x"] == matched["profit_y"], True, False)
对于这些匹配['date_comparison'] 和匹配[profit_comparison'] 的新列,我在 NaN 列中看到 False,但我希望是 True。
查找 numpy.NaN 我找到了这个 SO answer。
在比较 2 NaN
时,where 方法中的条件导致 Falsenumpy.NaN == numpy.NaN
> False
要检查两者是否都是 NaN,您可以使用:
numpy.NaN is numpy.NaN
> True
您需要将 is 检查添加到条件中以识别 2 NaN:
(matched["Start Date_x"] == matched["Start Date_y"]) or \
(matched["Start Date_x"] is matched["Start Date_y"])
您还可以使用 Set 来检查相等性而不是 2 个条件,因为它也适用于 NaN:
len({np.NaN, np.NaN}) == 1
> True
len({matched["Start Date_x"], matched["Start Date_y"]}) == 1