2014-03-03 121 views
36

我有一個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 u'occurred ')

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

給出了錯誤

ValueError異常:(' 無效字面爲float():1,200',u'發生在索引0')

那麼,如何將此DataFrame轉換爲字符串到浮動數據框?

+0

老問題,但OP是收到這個錯誤,因爲'apply'上DataFrame將整個**列**作爲一系列(在本例中爲'locale.atof',它期望一個字符串)傳遞給函數。如果你使用@AndyHayden在下面的答案中使用的'applymap'方法,你應該可以做到這一點。 –

回答

54

您需要set the locale第一:

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 

如果你reading in from csv那麼你可以使用thousands arg

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

我應該說我設置了語言環境。我仍然得到錯誤。 – pheon

+1

但我正在使用df.read_fwf,它也有「千= =,'」選項,這是可行的。謝謝。 – pheon

+0

然後,爲什麼df.applymap(atof)爲你工作,但不是我?我的區域設置是'en_US.UTF-8'。 – pheon

相關問題