#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’] = …. Это прекрасно работает.