2016-09-25 2 views
4

Я следующий dataframe, я хочу, чтобы преобразовать значения в столбце «Ъ» в целоеПреобразовать поплавок Int и оставить NULLS

a b  c 
0 1 NaN  3 
1 5 7200.0 20 
2 5 580.0 20 

Следующий код бросает исключение «ValueError: Не удается преобразовать NA в целое "

df['b'] = df['b'].astype(int) 

Как преобразовать только float в int и оставить нули как есть?

+0

Могу ли я спросить, почему? Выглядит уродливо? целочисленный массив не может иметь 'NaN' – Jeon

+0

Я вас понимаю, поэтому я должен сначала заменить NaN на 0, а затем преобразовать столбец в int? – billboard

+0

Если вы действительно хотите, 0, -1 или что-то, что вы можете отличить – Jeon

ответ

2

np.NaN - это только плавающая точка, поэтому его необходимо удалить, чтобы создать целое число pd.Series. Предложение предложения Jeon отлично. Если 0 - недопустимое значение в df['b']. Например:

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'a': [1, 5, 5], 'b': [np.NaN, 7200.0, 580.0], 'c': [3, 20, 20]}) 
print(df, '\n\n') 

df['b'] = np.nan_to_num(df['b']).astype(int) 

print(df) 

при наличии уважительных 0, то вы могли бы сначала заменить их все с каким-то уникальным значением (например, -999999999), то преобразование выше, а затем заменить эти уникальные значения с 0-х.

В любом случае, вы должны помнить, что у вас есть 0, где были когда-то NaNs. Вам нужно быть осторожным, чтобы отфильтровать их при выполнении различных численных анализов (например, средних и т. Д.).

Смежные вопросы