#pandas #dtype
#pandas #dtype
Вопрос:
Мне нужно преобразовать dtype следующего столбца df1
из float в int
Index ID
0 42.0
1 990.0
2 107.0
...
Name: ID, Length: 478, dtype: float64
Запуск df2 = df1['ID'].astype('int',errors='ignore')
, а затем проверка dtype
of df2
возвращает мне то же самое dtype
(т.Е. float64
) для df2
. Есть идеи, чего мне здесь не хватает? Может быть, это супер очевидно, но я был бы признателен за любые указания. Приветствия!
Ответ №1:
Параметр errors='ignore'
работает по-другому, как вы думаете — если какая-то ошибка возвращает те же значения, никакого разговора в Series.astype
:
ошибки {‘raise’, ‘ignore’}, по умолчанию ‘raise’
Контролируют возникновение исключений для недопустимых данных для предоставленного dtype.
поднять: разрешить создание исключений
игнорировать: подавлять исключения. При ошибке возвращает исходный объект.
Возможная идея — сначала удалить параметр:
df1['ID'] = df1['ID'].astype('int')
Если сбой произошел из-за использования отсутствующих значений integer na
, здесь Int64
:
df1['ID'] = df1['ID'].astype('Int64')
Комментарии:
1. Это было именно так! Пропущенные значения, при которых возникает ошибка, которую я проигнорировал через параметр, оставляющий
NaN
недостающие значения. ПосколькуNaN
этоfloat
игнорирование, оно заставилоdtype
всю серию быть afloat
. ИспользованиеIntergerArray
и"Int64"
(ЗАГЛАВНЫЙ глаз) решило эту проблему.