Метод Pandas DataFrames .equals () и оператор == изменяют поведение со значениями NaN при вызове .head () и .loc [] - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь выяснить, если это проблема, или я делаю что-то не так.

Я пытаюсь сравнить два кадра данных по одной строке каждый.И сравнение не удается при сравнении полей 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  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...