Pandas 在键中与 NaN 合并
Posted
技术标签:
【中文标题】Pandas 在键中与 NaN 合并【英文标题】:Pandas Merge with NaN in key 【发布时间】:2019-07-26 09:49:53 【问题描述】:我正在尝试合并 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
【问题讨论】:
【参考方案1】:我曾经回答过关于“为什么”部分的问题,您可以在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
【讨论】:
以上是关于Pandas 在键中与 NaN 合并的主要内容,如果未能解决你的问题,请参考以下文章
pandas将多个Series对象合并起来形成dataframe当索引不一致时会产生缺失值NaN
如何将带有 NaN 的合并 Excel 单元格读入 Pandas DataFrame
pandas 将数据框与 NaN(或“未知”)合并以查找缺失值