Панды: лучший способ удалить NaN из нескольких столбцов и преобразовать их в int - PullRequest
0 голосов
/ 09 ноября 2018

Предположим, у меня есть данные ниже CSV:

col1,col2,col3,label
,1,2,label1
3,,4,label2
5,6,7,label3

Каков наилучший способ прочитать эти данные и преобразовать col1 и col2, которые будут с плавающей точкой, в int.

Я могу использовать this и конвертировать отфильтрованный фрейм данных, в котором есть только числовые столбцы (col1, col2, col3). Как я могу изменить сам основной фрейм данных, игнорируя столбец метки, являющийся строкой?

В связанной заметке я также мог бы использовать приведенную ниже команду. Любая идея, как я мог бы запустить его в цикле, чтобы имя переменной col% d генерировалось динамически, поскольку у меня 32 столбца.

filter_df.col1 = filter_df.col1.fillna(0).astype(int)

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Вы можете использовать fillna с downcast='infer'.

m = df.dtypes == np.number
df.loc[:, m] = df.loc[:, m].fillna(0, downcast='infer')
print(df)
   col1  col2  col3   label
0     0     1     2     NaN
1     3     0     4  label2
2     5     6     7  label3
0 голосов
/ 09 ноября 2018

Использование select_dtypes с np.number:

print (filter_df)
   col1  col2  col3   label
0   NaN   1.0     2     NaN
1   3.0   NaN     4  label2
2   5.0   6.0     7  label3

cols = filter_df.select_dtypes(np.number).columns
filter_df[cols] = filter_df[cols].fillna(0).astype(int)

print (filter_df)
   col1  col2  col3   label
0     0     1     2     NaN
1     3     0     4  label2
2     5     6     7  label3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...