2015-08-10 4 views
3

У меня есть кадр данных df выглядит следующим образом:Невозможно изменить тип данных в кадре данных

 birth_year person 
    0  1980   0 
    1  1981   1 
    2  1982   2 
    3  1983   3 
    4  1984   4 

birth_year колонка выглядит как числа, но когда я проверяю тип данных df['birth_year'].dtype результат dtype('O')

, так что я думал, что это может быть на самом деле строка, и попытался преобразовать его номера с df['birth_year'].astype('int'), но получил ошибку:

UnicodeEncodeError: 'decimal' codec can't encode characters in position 
    0-3: invalid decimal Unicode string 

После небольшого поискового запроса я понял (может быть, ошибочно), что в нем есть невидимые персонажи. при доступе к значениям df['birth_year'][0] значение, которое я получил, составляет 1980L, а не 1980.

так что такое тип данных и как его преобразовать в целые числа? Я где-то читал, что если возвращаемый тип данных равен dtype('O'), это обычно означает, что это строка, но это, похоже, не так.

+1

Попробуйте 'ФР [ 'birth_year']. Astype (INT)', 'не 'int''. – DeepSpace

+1

вы можете попробовать 'df = df.convert_objects (convert_numeric = True)' – EdChum

+0

Tried 'df ['birth_year']. Astype (int)' и получил ту же ошибку –

ответ

2

Вы можете конвертировать обычно используя df['birth_year'].astype(int) но, кажется, у вас есть недопустимые значения, используя df = df.convert_objects(convert_numeric=True) будет принуждать недопустимые значения NaN, которые могут или не могут быть то, что вы хотите, как это меняет DTYPE на float64, а не int64.

Лучше всего посмотреть неверные значения строк, чтобы определить, почему они не смогли преобразовать.

Таким образом, вы могли бы сделать df[df.convert_objects(convert_numeric).isnull()], чтобы получить те строки, которые имеют недопустимое 'birth_year' значения

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