Преобразование числовых строк с запятыми в 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 с плавающей точкой?
Ответы
Ответ 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)