Как исправить неверный литерал для int() с ошибкой base 10 в pandas

Это ошибка, которая появляется всякий раз, когда я пытаюсь преобразовать фрейм данных в int.

("неверный литерал для int() с основанием 10: '260 327 021'", 'произошло в индексе Population1'

Все в df является числом. Я предполагаю, что ошибка связана с дополнительной цитатой в конце, но как ее исправить?


person Caribgirl    schedule 08.05.2017    source источник


Ответы (4)


я запускаю это

int('260,327,021')

и получить это

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-448-a3ba7c4bd4fe> in <module>()
----> 1 int('260,327,021')

ValueError: invalid literal for int() with base 10: '260,327,021'

Уверяю вас, что не все в вашем фрейме данных является числом. Это может выглядеть как число, но это строка с запятыми.

Вы захотите заменить запятые, а затем превратиться в int

pd.Series(['260,327,021']).str.replace(',', '').astype(int)

0    260327021
dtype: int64
person piRSquared    schedule 08.05.2017
comment
Ух ты. Большое спасибо! Значит, тогда мне придется все заменить. Каждое число в df выглядит так, как я дал. - person Caribgirl; 09.05.2017
comment
@Caribgirl да! Если вы не читаете его из файла, то вы можете передать параметр функции read_csv, а именно thousands=',' - person piRSquared; 09.05.2017
comment
Большое спасибо, это сработало! мой Бог. Я пытался исправить это в течение нескольких часов! Благодарю вас!!!!! - person Caribgirl; 09.05.2017

Другие могут столкнуться со следующей проблемой, когда строка является числом с плавающей запятой:

    >>> int("34.54545")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '34.54545'

Обходной путь для этого состоит в том, чтобы сначала преобразовать в число с плавающей запятой, а затем в целое число:

>>> int(float("34.54545"))
34

Или конкретно для панд:

df.astype(float).astype(int)
person kristian    schedule 03.03.2018

Я решил ошибку, используя pandas.to_numeric.

В твоем случае,

data.Population1 = pd.to_numeric(data.Population1, errors="coerce")

«данные» — это родительский объект.

После этого вы также можете преобразовать float в int

data.Population1.astype(int)
person Abhishek Sinha    schedule 17.01.2020

Для меня это был немного другой случай.

Я загрузил свой фрейм данных как таковой:

my_converter = {'filename': str, 'revision_id': int}

df = pd.read_csv("my.csv", header=0, sep="\t", converters=my_converter)

потому что head -n 3 my.csv выглядел так:

"filename"     "revision_id"
"some_filename.pdf"     "224"
"another_filename.pdf"     "128"

Однако через тысячи строк была такая запись:

 "very_\"special\"_filename.pdf"     "46"

это означало, что мне нужно было указать escape-символ для read_csv(). В противном случае он попытается преобразовать special в int для поля revision_id и сгенерирует ошибку.

Итак, правильный способ:

df = pd.read_csv("my.csv", header=0, sep="\t",  escapechar='\\', converters=my_converter)
person bikashg    schedule 19.01.2021