Я недавно задал вопрос о пропущенных значениях в пандах здесь и был направлен на проблему github .После прочтения этой страницы и документации об отсутствующих данных .
мне интересно, почему 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
Однако NaN в groupby
исключены:
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()]
, но мне любопытно, почему NaN являютсяисключены в некоторых операциях панд, таких как groupby
, а не в других, таких как merge
, join
, update
и map
?
По сути, как я спросил выше, почему merge
и join
совпадают на np.nan
, когда они не равны?