astype не преобразует float в int

#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 всю серию быть a float . Использование IntergerArray и "Int64" (ЗАГЛАВНЫЙ глаз) решило эту проблему.