Я пытаюсь выяснить, если это проблема, или я делаю что-то не так.
Я пытаюсь сравнить два кадра данных по одной строке каждый.И сравнение не удается при сравнении полей NaN.
например, у меня есть эти две строки.Первый - оригинальный, а второй - после некоторой фильтрации, но в конце та же строка.
Исходная.
> df.loc[3968]
col1 Name
col2 201800000953
col3 0000002
col4 Please disconnec...
col5 NaN
[more columns]
Name: 3968, dtype: object
То же самое после некоторой фильтрации.
> df2.head(1)
col1 Name
col2 201800000953
col3 0000002
col4 Please disconnec...
col5 NaN
[more columns]
Name: 3968, dtype: object
Это типы
> type(df2.head(1).col5.values[0])
numpy.float64
> type(df.loc[3968].col5)
numpy.float64
> df.dtypes
col1 object
col2 int64
col3 int64
col4 object
col5 float64
> df2.dtypes
col1 object
col2 int64
col3 int64
col4 object
col5 float64
Это то, что я получил, когда сравнивал
> df2.head(1).equals(df.loc[3968])
False
> df2.iloc[0].equals(df.loc[3968])
True
> df2.head(1) == df.loc[3968]
col1 True
col2 True
col3 True
col4 True
col5 False
Name: 3968, dtype: bool
> df2.iloc[0] == df.loc[3968]
col1 True
col2 True
col3 True
col4 True
col5 False
Name: 3968, dtype: bool
Как видите, он не работает, когдазначения являются NaN.Но если я заменяю значения NaN на что-то, это не дает сбоя.
> df2.fillna(0).iloc[0].equals(df.loc[3968].fillna(0))
True
> df2.head(1).fillna(0) == df.loc[3968].fillna(0)
col1 True
col2 True
col3 True
col4 True
col5 True
Name: 3968, dtype: bool
> df2.iloc[0].fillna(0) == df.loc[3968].fillna(0)
col1 True
col2 True
col3 True
col4 True
col5 True
Name: 3968, dtype: bool
Почему меняется поведение?Разве это не одно и то же использование .head (1) и .iloc [0]?
Я думал, что .head () может приводить значения NaN к str.Но это не потому, что
> type(df2.head(1).col5.values[0])
numpy.float64