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键被标识为有效类别(类别值等于计数
)
免责声明:我不是熊猫开发者,这只是我的猜测;因此,真正的问题可能是其他问题。但乍一看,似乎是这样