2015-09-26 80 views
2

我想將Pandas DataFrame中的所有string值轉換爲float,我可以定義一個簡短的函數來做到這一點,但這不是Pythonic的方法。我的數據框看起來是這樣的:pandas如何將所有的字符串值轉換爲浮點數

>>> df = pd.DataFrame(np.array([['1', '2', '3'], ['4', '5', '6']])) 
>>> df 
    0 1 2 
0 1 2 3 
1 4 5 6 
>>> df.dtypes 
0 object 
1 object 
2 object 
dtype: object 
>>> type(df[0][0]) 
<type 'str'> 

我只是想知道是否存在的Pandas DataFrame一些內置的功能,所有的string值轉換爲float。如果您知道Pandas文檔中的內置功能,請發佈鏈接。

回答

3

假設所有的值都可以正確地轉換爲浮點數,那麼可以使用DataFrame.astype()函數將完整數據幀的類型轉換爲浮點數。示例 -

df = df.astype(float) 

演示 -

In [5]: df = pd.DataFrame(np.array([['1', '2', '3'], ['4', '5', '6']])) 

In [6]: df.astype(float) 
Out[6]: 
    0 1 2 
0 1 2 3 
1 4 5 6 

In [7]: df = df.astype(float) 

In [8]: df.dtypes 
Out[8]: 
0 float64 
1 float64 
2 float64 
dtype: object 

.astype()功能上也有一個raise_on_error參數(默認爲True),你可以設置爲False,使其忽略錯誤。在這種情況下,原來的值被用於在數據幀 -

In [10]: df = pd.DataFrame([['1', '2', '3'], ['4', '5', '6'],['blah','bloh','bleh']]) 

In [11]: df.astype(float,raise_on_error=False) 
Out[11]: 
     0  1  2 
0  1  2  3 
1  4  5  6 
2 blah bloh bleh 

要轉換隻是由一系列/列浮動,再次假設所有的值可以轉換,你可以使用[Series.astype()][2]。示例 -

df['somecol'] = df['somecol'].astype(<type>) 
+0

它的工作原理,謝謝! –

4

另一個選項是使用df.convert_objects(numeric=True)。它試圖 轉換數字字符串到數字,與不可轉換值成爲楠:

import pandas as pd 

df = pd.DataFrame([['1', '2', '3'], ['4', '5', 'foo'], ['bar', 'baz', 'quux']]) 
df = df.convert_objects(convert_numeric=True) 
print(df) 

產生

0 1 2 
0 1 2 3 
1 4 5 NaN 
2 NaN NaN NaN 

相比之下,df.astype(float)將在上述數據幀提高ValueError: could not convert string to float: quux因爲一些字符串(如'quux')不是數字。

注意:在未來版本的熊貓中(0.16.2之後),函數參數將是numeric=True而不是convert_numeric=True