Потенциальная ошибка в np.isnan () для смешанных типов на pandas Dataframe - PullRequest
0 голосов
/ 08 января 2020

Я столкнулся с ошибкой в ​​np.isnan (). Возможно, он предназначен для такой работы, и проблема в том, как pandas справляется с этим. Если я создаю кадр данных со смешанными типами, такими как

raw_data = {'Binary 1': [True, True, False, False, True], 
    'Binary 2': [False, False, True, True, False], 
    'age': [42, 52, 36, 24, 73], 
    'preTestScore': [4, 24, 31, 2, 3],
    'postTestScore': [25, 94, 57, 62, 70]}
df = pd.DataFrame(raw_data, columns = ['Binary 1', 'Binary 2', 'age', 'preTestScore', 'postTestScore'])

df.dtypes


Binary 1          bool
Binary 2          bool
age              int64
preTestScore     int64
postTestScore    int64

, я не могу вызвать

np.isnan(df)

Ошибка типа: ufun c 'isnan' не поддерживается для типов ввода и входы не могут быть безопасно приведены к каким-либо поддерживаемым типам в соответствии с правилом приведения "safe" "

И это

np.isnan(df[['Binary 1', 'Binary 2']])

и это

np.isnan(df[['age', 'preTestScore', 'postTestScore']])

работа. Я думаю, что это потому, что они одного типа, поскольку это не

np.isnan(df[['Binary 1', 'age']])

1 Ответ

2 голосов
/ 08 января 2020

np.isnan - это функция numpy, поэтому она работает с массивами numpy и значениями, полученными из ввода:

In [418]: df[['Binary 1', 'Binary 2']].values                                   
Out[418]: 
array([[ True, False],
       [ True, False],
       [False,  True],
       [False,  True],
       [ True, False]])

Это 2-й логический массив dtype. Но весь фрейм данных имеет смешанные dtypes, поэтому он создает объект dtype:

In [419]: df.values                                                             
Out[419]: 
array([[True, False, 42, 4, 25],
       [True, False, 52, 24, 94],
       [False, True, 36, 31, 57],
       [False, True, 24, 2, 62],
       [True, False, 73, 3, 70]], dtype=object)

Приведение этого массива к int (или с плавающей точкой) работает нормально: np.isnan(df.values.astype(int))

Но как Как отмечалось в комментариях, pandas имеет свой собственный тестер nan, который, я считаю, еще более мощный (и прощающий). np.isnan действительно предназначен для массивов с плавающей точкой, так как np.nan является плавающей точкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...