Как преобразовать столбец с отсутствующим значением в целочисленный тип - PullRequest
0 голосов
/ 08 декабря 2018

Я хочу преобразовать столбец в целое число, но проблема в том, что столбец содержит пропущенное значение.Столбец преобразуется в число с плавающей точкой, но не может быть преобразовано в целое число.

Пример кода:

d2 = {'location': ['NY', 'NY', 'PA', 'NY', 'PA', 'PA', 'NY'], 'dep_name': ['hr', 'mk', 'fin', 'fin', 'hr', 'fin', 'fin'], 'Duration_of_Employment' : [10, 5, 9, 8, 2, 4, 7], 'Salary' : [50000, 86000,25000, 73000, 28000, 60000, 40000], 'Days_Since_Last_Promotion': ['61', '35', '25', '98', 'NaN', '45', '22']}
df2 = pd.DataFrame(data = d2)

df2['xy']  = df2['Days_Since_Last_Promotion'].astype(float)
df2['Months_Since_Last_Promotion'] = df2['xy'] // 30

Теперь 'Months_Since_Last_Promotion' является типом с плавающей запятой.Но когда я пытаюсь преобразовать его в целое число, я получаю следующую ошибку:

df2['Months_Since_Last_Promotion'] = df2['Months_Since_Last_Promotion'].astype(int)

ValueError: Невозможно преобразовать NA в целое число

Из ошибки я понял,из-за пропущенного значения Nan и пробовал эту работу вокруг. Но это не сработало, и 'Months_Since_Last_Promotion' все еще показывает как float64.

df2.loc[df2['Months_Since_Last_Promotion'].notnull(), 'Months_Since_Last_Promotion'] = df2.loc[df2['Months_Since_Last_Promotion'].notnull(), 'Months_Since_Last_Promotion'].astype(int)

Примечание: я не могу использовать fillna для замены NaN.Цель состоит в том, чтобы столбец оставался целым числом.

1 Ответ

0 голосов
/ 08 декабря 2018

Числовые столбцы, содержащие значения NaN, по умолчанию сохраняются в виде чисел с плавающей запятой (даже если все остальные числа являются целыми числами) - это связано с ограничениями типов в пандах.Это означает, что если вы хотите сохранить значение NaN без заполнения пропущенного значения, преобразование столбца в целое число может оказаться невозможным (насколько мне известно).Вот выдержка из документации:

"Хотя pandas поддерживает хранение массивов целочисленного и логического типа, эти типы не способны хранить отсутствующие данные. Пока мы не сможем перейти к использованию собственного типа NA в NumPy, мы установили некоторые «правила приведения». Когда операция переиндексации вводит отсутствующие данные, серия будет разыгрываться в соответствии с правилами, приведенными в таблице ниже. "

Пожалуйста, обратитесь к:

https://pandas.pydata.org/pandas-docs/stable/missing_data.html#missing-data-casting-rules-and-indexing

...