Панды, преобразование столбцов в целое число, недопустимый литерал для int() с основанием 10

#python #python-3.x #pandas

Вопрос:

.dtypes показывает, что столбец «Сумма» по умолчанию является объектом

Поэтому я попробовал это,

 df['Amount'] = df['Amount'].astype(int)  

Я получил эту ошибку,

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

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

1. По вашим собственным словам, учитывая то, что '3,448.91' указано в колонке, как вы думаете, каким должен быть int результат для этого? Почему? По вашим собственным словам, что это int значит?

2. Это функция, которая преобразует значение в целое число

3. По вашим собственным словам, что такое целое число?

Ответ №1:

Проблема в том, что ваш столбец содержит запятую( , ). Сначала замените это пустой строкой, затем преобразуйте тип в int .

 df['Amount'] = df['Amount'].str.replace(',', '').astype(float)  

Если вы хотите округлить значения и преобразовать в int , сделайте это:

 df['Amount'] = df['Amount'].str.replace(',', '').astype(float).round().astype(int)  

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

1. Это не решит проблему, так как '3448.91' все еще не может быть преобразовано в целое число. Есть две вещи, которые ОП мог бы пожелать: преобразовать в float вместо этого или округлить или усечь значение до целого числа в соответствии с каким-либо правилом. На этот вопрос не следует отвечать до тех пор, пока он не будет решен.

2. Я отказался, потому что знал, что вы все равно получите эту ошибку.

3. @Pythonaccount Попробуйте ответить сейчас.

4. @KarlKnechtel, пожалуйста, проверьте мой обновленный ответ. Я занимался обоими делами, на которые вы указали.

5. @Mayank Porwal Я, должно быть, делаю что-то действительно глупое. Первая первая строка выше ошибки как «Ошибка атрибута: Можно использовать метод доступа .str только со строковыми значениями!». Однако, если я вместо этого создам новый столбец вместо перезаписи суммы, df[‘New_Amount’] = …. Это прекрасно работает.