我是pandas的新手,并试图弄清楚如何将格式化为字符串的多个列转换为float64。目前我正在做下面的事情,但似乎apply()或applymap()应该能够更有效地完成这项任务......不幸的是,我有点太过新手了解如何。目前,这些值的格式为字符串,如'15 .5%'
for column in ['field1', 'field2', 'field3']:
data[column] = data[column].str.rstrip('%').astype('float64') / 100
答案 0 :(得分: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 :(得分:1)
df.applymap(lambda x:float(x.rstrip('%'))/100)
答案 2 :(得分:1)
在接受的答案中回答评论: 对于特定列,请确保您不要在现场进行。
df['Column1'] = df['Column1'].replace('%','',regex=True).astype('float')/100