Python 为什么熊猫会在南部合并?

Python 为什么熊猫会在南部合并?,python,python-3.x,pandas,Python,Python 3.x,Pandas,最近,我问了一个关于大熊猫价值缺失的问题,并直接问了一位科学家。看完那一页和那本书后 我想知道为什么merge和join在“它们不相等”时将nan视为匹配项:np.nan!=np.nan # merge example df = pd.DataFrame({'col1':[np.nan, 'match'], 'col2':[1,2]}) df2 = pd.DataFrame({'col1':[np.nan, 'no match'], 'col3':[3,4]}) pd.merge(df,df2,

最近,我问了一个关于大熊猫价值缺失的问题,并直接问了一位科学家。看完那一页和那本书后

我想知道为什么
merge
join
在“它们不相等”时将nan视为匹配项:
np.nan!=np.nan

# merge example
df = pd.DataFrame({'col1':[np.nan, 'match'], 'col2':[1,2]})
df2 = pd.DataFrame({'col1':[np.nan, 'no match'], 'col3':[3,4]})
pd.merge(df,df2, on='col1')

    col1    col2    col3
0   NaN      1       3

# join example with same dataframes from above
df.set_index('col1').join(df2.set_index('col1'))

      col2  col3
col1        
NaN     1   3.0
match   2   NaN
但是,不包括
groupby
中的NAN:

df = pd.DataFrame({'col1':[np.nan, 'match', np.nan], 'col2':[1,2,1]})
df.groupby('col1').sum()

       col2
col1    
match   2
当然,您可以
dropna()
df[df['col1'].notnull()]
,但我很好奇,为什么在一些pandas操作中,比如
groupby
,而不是在其他操作中,比如
merge
join
update
,和
map
,都不包括nan code>

本质上,正如我上面所问的,为什么
merge
join
np.nan
上不匹配?是的,这肯定是一个bug。查看哪些文档正是您的问题所在,哪些注释使用
None
也可以观察到该问题。根据讨论,这似乎不是有意的行为

快速深入源代码显示问题*可能在
pandas/core/restrape/merge.py
中的函数中。此函数用于分解键,以确定哪些行要相互匹配

具体来说,这一部分

# NA group
lmask = llab == -1
lany = lmask.any()
rmask = rlab == -1
rany = rmask.any()

if lany or rany:
    if lany:
        np.putmask(llab, lmask, count)
    if rany:
        np.putmask(rlab, rmask, count)
    count += 1
…似乎是罪魁祸首。NaN键被标识为有效类别(类别值等于
计数

免责声明:我不是熊猫开发者,这只是我的猜测;因此,真正的问题可能是其他问题。但乍一看,似乎是这样