python - Pandas 在键中与 NaN 合并

标签 python python-3.x pandas merge

我正在尝试合并 2 个数据帧,它们的键列中都有 NaN。 NaN 不等于 NaN,但“键”列中的两个 NaN 匹配。为什么会这样,我怎样才能让它们不匹配?我正在使用 python 3.6。

df1 = pd.DataFrame({'key': [3,2,1,1,np.nan,5], 'value': np.random.randn(6)})
df2 = pd.DataFrame({'key': [1,3,np.nan], 'value': np.random.randn(3)})

df = pd.merge(df1, df2, on='key', how='left')

print(df1)
print(df2)
print(df)

   key     value
0  3.0  0.642917
1  2.0  1.347245
2  1.0 -1.381299
3  1.0  1.839940
4  NaN  0.770599
5  5.0 -0.137404

   key     value
0  1.0  0.580794
1  3.0  0.569973
2  NaN -0.078336

   key   value_x   value_y
0  3.0  0.642917  0.569973
1  2.0  1.347245       NaN
2  1.0 -1.381299  0.580794
3  1.0  1.839940  0.580794
4  NaN  0.770599 -0.078336
5  5.0 -0.137404       NaN

np.nan == np.nan
Out[25]: False

最佳答案

我曾经回答过关于“为什么”部分的问题,您可以在 Why does pandas merge on NaN? 阅读更多内容.

要修复,为什么不在合并之前调用 dropna

df1.merge(df2.dropna(subset=['key']), on='key', how='left')

   key   value_x   value_y
0  3.0 -0.177450 -1.879047
1  2.0  0.179939       NaN
2  1.0 -1.033730 -1.433606
3  1.0  1.426648 -1.433606
4  NaN -0.320173       NaN
5  5.0 -1.824740       NaN

关于python - Pandas 在键中与 NaN 合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54994154/

相关文章:

python - 通过检查 pandas 数据框来替换单词

python - 为什么我会收到 best_ precision_threshold 的 IndexError ?

python - Mongoengine:查询 MapField

python - 比较 pd.Series 并在系列包含 None 时得到看起来不寻常的结果

python - 比较 Pandas 中两个数据框的行

python - PyQt4 QTableWidget - 过滤和修改 mySQL 数据库中的数据

从 GeoJSON 加载的 Python 3.X Shapely Polygon

python - 在 Mac OS 上使用 virtualenvwrapper 在 python 版本之间切换

python - 在 pandas 数据框中定义不同类型的列

javascript - Python 爬虫机械化/javascript