Ошибка преобразования Pandas Dataframe в плавающую запятую - PullRequest
0 голосов
/ 25 июня 2018

, поэтому я получил Dataframe как минимум с 2-3 столбцами с номерами от 1 до 3000, и цифры имеют запятую. Мне нужно преобразовать числа с плавающей точкой или int во все соответствующие столбцы. Это пример для моего Dataframe:

data = pd.read_csv('exampleData.csv')
data.head(10)
 Out[179]:
 Rank     Total
  1         2
  20        40
  1,200    1,400
  NaN       NaN

Как видно из примера, мой Dataframe состоит из чисел, чисел с запятой и некоторых NaN. Я читал здесь несколько постов о преобразовании в float или int, но я всегда получаю сообщения об ошибках, такие как: 'str' Объект не имеет атрибута «Астип». мой подход заключается в следующем для нескольких столбцов:

cols = ['Rank', 'Total']
data[cols] = data[cols].apply(lambda x: pd.to_numeric(x.astype(str)
                                               .str.replace(',',''), errors='coerce'))

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

Панды read_csv () принимает много аргументов, которые позволяют вам контролировать, как поля преобразуются С документация :

decimal : str, default ‘.’
    Character to recognize as decimal point (e.g. use ‘,’ for European data).

Итак, вот сумасшедшая идея: преобразовать числовые поля, используя ключевое слово аргумент "decimal = ','". Затем умножьте числовые поля на 1000.

0 голосов
/ 25 июня 2018

Решение Джона не будет работать для чисел с несколькими запятыми, например, 1 384 496.

Более масштабируемым решением было бы просто сделать

data = data.replace({",":""}, regex=True)

Затем преобразуйте строки в числовые.

0 голосов
/ 25 июня 2018

Используйте аргумент thousands.

pd.read_csv('exampleData.csv', thousands=',')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...