2013-05-20 112 views
12

我是熊貓新手,想弄清楚如何將多個格式化爲字符串的列轉換爲float64格式。目前,我正在做下面的工作,但是似乎apply()或applymap()應該能夠更高效地完成這項任務...不幸的是,我有點太過於瞭解新手了。目前,該值是格式化爲字符串像'15 1.5%」熊貓將字符串轉換爲浮動數據框中的多列

for column in ['field1', 'field2', 'field3']: 
    data[column] = data[column].str.rstrip('%').astype('float64')/100 

回答

11

在0.11.1(本週現身)開始百分比,更換有一個新的選擇與一個正則表達式來代替,所以這成爲可能

In [14]: df = DataFrame('10.0%',index=range(100),columns=range(10)) 

In [15]: df.replace('%','',regex=True).astype('float')/100 
Out[15]: 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 100 entries, 0 to 99 
Data columns (total 10 columns): 
0 100 non-null values 
1 100 non-null values 
2 100 non-null values 
3 100 non-null values 
4 100 non-null values 
5 100 non-null values 
6 100 non-null values 
7 100 non-null values 
8 100 non-null values 
9 100 non-null values 
dtypes: float64(10) 

而且有點快

In [16]: %timeit df.replace('%','',regex=True).astype('float')/100 
1000 loops, best of 3: 1.16 ms per loop 

In [18]: %timeit df.applymap(lambda x: float(x[:-1]))/100 
1000 loops, best of 3: 1.67 ms per loop 
+1

能否請你告訴我,我怎麼能實現這個特定列? 'df ['Column1']。replace('%','',regex = True).astype('float')/ 100'不起作用。 – erantdo

1
df.applymap(lambda x:float(x.rstrip('%'))/100) 
+1

*略*更有效地使用'df1.applymap(拉姆達X:浮置(X [: - 1]))/ 100' ... –

1

回答在接受的答案評論: 爲特定列確保你不要在原地進行。

df['Column1'] = df['Column1'].replace('%','',regex=True).astype('float')/100 
相關問題