Панды: почему я получаю другой формат числа при определенных условиях? - PullRequest
0 голосов
/ 27 августа 2018

У меня есть файл данных pandas df, который содержит nan и строки как _MISSING. Я хочу установить значения nan и _MISSING равными -1.

df   A       B
0    4   _MISSING
1   NaN    hello
2    3      tom
3   NaN  _MISSING

Вот что я делаю:

df.ix[df.A.isnull(), 'A'] = -1
df.ix[df.B == '_MISSING', 'B'] = -1

это результат

df   A       B
0    4      -1
1  -1.0    hello
2    3     tom
3  -1.0     -1

, где

type(df.A[0])
numpy.float64

type(df.B[0])
int

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Вы можете заменить выбранные значения в B на np.nan, затем использовать pd.DataFrame.fillna:

import numpy as np

df.loc[df['B'] == '_MISSING', 'B'] = np.nan
df = df.fillna(-1)

print(df)

   df    A      B
0   0  4.0     -1
1   1 -1.0  hello
2   2  3.0    tom
3   3 -1.0     -1
0 голосов
/ 27 августа 2018

Панды бросают любые целочисленные столбцы с NaN для плавания.

>>> df = pd.DataFrame({'a':[1,2,np.nan], 'b':['_MISSING', 'HELLO','World']})
>>> df.ix[df.a.isnull(), 'a'] = -1
>>> type(df.a[0])
<class 'numpy.float64'>

, тогда как, если вы замените значение в нечисловом столбце, например

>>> df.ix[df.b == '_MISSING', 'b'] = -1
>>> type(df.b[0])
<class 'int'>

Pandas преобразует его в int, и если вы замените его на число с плавающей точкой, сделайте это явно, -1.0.

>>> df.ix[df.b == '_MISSING', 'b'] = -1.0
>>> type(df.b[0])
<class 'float'>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...