Ошибка значения: недопустимый литерал для int() с основанием 10: «в Python/ Ошибка индекса: индекс списка вне диапазона

#python #python-3.x #pandas #dataframe

Вопрос:

введите описание изображения здесь

Я пытаюсь выучить Python и работаю над проектом. Я хочу разделить колонку. Столбец, подобный этому; доход 60-80 120 — 0-40 Вот мой код: Для строки def[«min_income] я получаю недопустимый литерал для int() с базовой ошибкой, для другой строки (max_income) Я получаю ошибку индекса списка вне диапазона.

 income = df["Income"]
income = income.replace({"Unknown": ""})

df["min_income"] = income.apply(lambda x: int(x.split("-")[0]))
df["max_income"] = income.apply(lambda x: x.split("-")[1])
 

Но результат дает такую ошибку:

  df["min_income"] = income.apply(lambda x: int(x.split("-")[0]))
Traceback (most recent call last):

  File "<ipython-input-69-9be6a45724ad>", line 1, in <module>
    df["min_income"] = income.apply(lambda x: int(x.split("-")[0]))

  File "C:Usersmeminanaconda3libsite-packagespandascoreseries.py", line 4138, in apply
    mapped = lib.map_infer(values, f, convert=convert_dtype)

  File "pandas_libslib.pyx", line 2467, in pandas._libs.lib.map_infer

  File "<ipython-input-69-9be6a45724ad>", line 1, in <lambda>
    df["min_income"] = income.apply(lambda x: int(x.split("-")[0]))

ValueError: invalid literal for int() with base 10: ''
 

Я хочу разделить столбец доходов на две разные части(столбцы)-min_income и max_income — в виде целого числа. Я проверяю ошибку в Интернете, но не смог устранить проблему. Как я могу решить эту проблему?
Также я устал .функция astype(int).

Ответ №1:

Если у вас есть этот фрейм данных:

    income
0   60-80
1    0-40
2    120-
3  80-120
4    -255
 

Затем:

 df[["min_income", "max_income"]] = df["income"].str.split("-", expand=True)
print(df)
 

Создадим две колонки "min_income" и "max_income" :

    income min_income max_income
0   60-80         60         80
1    0-40          0         40
2    120-        120           
3  80-120         80        120
4    -255                   255
 

Затем вы можете заполнить пустые значения по своему усмотрению (а затем преобразовать их в числовой формат).

Комментарии:

1. это может быть такой простой вопрос, но мне интересно, почему мой код не работает? Я думаю, что могу разделить его.

2. @Emin Если вы посмотрите свои данные, вы увидите, что у вас есть какой-то доход в форме 120- и т. Д. (так что никакого максимального значения). Вы не можете преобразовать пустую '' строку в целое число. Вам нужно указать правильное значение.