Недавно я задал вопрос относительно отсутствующих значений в панд здесь и был направлен на вопрос 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
Тем не менее, NaNs в 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
?