Конвертировать dtype objecto в int Python Pandas - PullRequest
0 голосов
/ 11 апреля 2020

Сейчас я работаю с файлом, содержащим записанные числа, но всякий раз, когда я пытаюсь выполнить с ними некоторые вычисления, всплывает ValueError (недопустимый литерал для int () с основанием 10: '6,92').

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

numberX = driver.find_element_by_xpath('//*[@id="form1"]/div[3]/div/div/div[1]/div[2]/div/div/div[3]/span/i').text
number = ''
for i in numberX:
    if i in '0123456789,':
        number += i

'numberX' содержит буквенно-цифровые значения, а 'number' - нет. Тем не менее, dtype для 'number' - это object.

Я пытался:

df['number'].astype(str).astype(int)

Но всплывает та же ошибка ValueError.

Если я экспортирую данные в Excel столбец со значениями «число» появляется в текстовом формате, и Excel дает мне возможность преобразовать их в числа. Кроме того, я проверил, и значения содержат только цифры и запятые (',').

Часть напечатанного кадра данных выглядит примерно так:

Date  Amount  Number
0   11/04/2020   10000        6,92
1   11/04/2020   10000        6,77
2   11/04/2020   10000        6,66
3   11/04/2020   10000        6,59

Любое представление о том, что могло случиться?

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 11 апреля 2020

Будет ли преобразование в числа с плавающей точкой первым вместо int работать на вас?

df['number'] = df['number'].astype(str).astype(float)

и если вы хотите преобразовать в int, вы все равно можете go сделать один дополнительный шаг:

df['number'] = df['number'].astype(str).astype(float).astype(int)

Вы также могли прийти к этому солутину через уже отвеченные вопросы: ValueError: недопустимый литерал для int () с основанием 10: ''

Обновлено

также необходимо заменить запятую точкой:

df['number'].apply(lambda x: x.replace(',','.')).astype(float)
1 голос
/ 11 апреля 2020

Я думаю, вы можете заменить , и затем преобразовать его в int.

df['number'] = df['number'].str.replace(',','').astype(int)
0 голосов
/ 11 апреля 2020

Вы можете сделать следующее: -

df['number'] = df['number'].astype('int32')

...