python - Pandas 在键中与 NaN 合并
问题描述
我正在尝试合并 2 个数据框,它们的键列中都有 NaN。NaN 不等于 NaN,但“key”列中的两个 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
解决方案
我曾经回答过一个关于“为什么”部分的问题,您可以阅读更多内容:为什么 pandas 在 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
推荐阅读
- r - 将经过时间(HH:MM:SS)从excel导入R
- amazon-s3 - 使用 OAI 受限存储桶策略时,具有 S3 源的 Cloudfront 返回 AccessDenied
- flutter - 有人可以帮我阻止这个错误吗?我的flutter项目中的flutter bar显示时总是会出现这个错误
- javascript - Nextjs - 将 props 从自定义 _app.js 传递到
零件? - react-native - 如何在本机反应中使用 uri 播放 Lottie 动画?
- c# - 何时在方法中返回“this”而不是“void”,为什么?
- python - 你可以在没有某种框架的情况下将数据从 Python 文件发送到 HTML 吗?
- python - 如何检查每个字母是否在多个字符串中?
- webpack - 使用 webpack/ts 别名从另一个文件导入 JSDoc
- reactjs - 如何在我的 UI 表单中增强钩子视图的空状态