2013-05-20 113 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 
相关问题