Подтвердить что ты не робот

Преобразование числовых строк с запятыми в pandas DataFrame для float

У меня есть DataFrame, который содержит числа в виде строк с запятыми для маркера тысячи. Мне нужно конвертировать их в поплавки.

a = [['1,200', '4,200'], ['7,000', '-0.03'], [ '5', '0']]
df=pandas.DataFrame(a)

Я предполагаю, что мне нужно использовать locale.atof. В самом деле

df[0].apply(locale.atof)

работает как положено. Я получаю серию поплавков.

Но когда я применяю его к DataFrame, я получаю сообщение об ошибке.

df.apply(locale.atof)

Ошибка типа: ("невозможно преобразовать серию в", вы произошли с индексом 0 ")

а также

df[0:1].apply(locale.atof)

выдает еще одну ошибку:

ValueError: ('недопустимый литерал для float(): 1,200', u'принято с индексом 0 ')

Итак, как мне преобразовать этот DataFrame строк в DataFrame с плавающей точкой?

4b9b3361

Ответ 1

Если вы читаете из csv, вы можете использовать тысячи arg:

df.read_csv('foo.tsv', sep='\t', thousands=',')

Этот метод, вероятно, будет более эффективным, чем выполнение операции в качестве отдельного шага.


Вам нужно сначала установить локаль:

In [ 9]: import locale

In [10]: from locale import atof

In [11]: locale.setlocale(locale.LC_NUMERIC, '')
Out[11]: 'en_GB.UTF-8'

In [12]: df.applymap(atof)
Out[12]:
      0        1
0  1200  4200.00
1  7000    -0.03
2     5     0.00

Ответ 2

Вы можете использовать метод pandas.Series.str.replace:

df.iloc[:,:].str.replace(',', '').astype(float)

Этот метод может удалить или заменить запятую в строке.

Ответ 3

Вы можете конвертировать один столбец за раз, например, так:

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