12

私はパンダが初めてで、文字列としてフォーマットされた複数の列を float64 に変換する方法を見つけようとしています。現在、私は以下のことを行っていますが、apply() または applymap() がこのタスクをさらに効率的に達成できるように思われます...残念ながら、私は新人すぎて方法を理解できません。現在、値は「15.5%」のような文字列としてフォーマットされたパーセンテージです。

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

3 に答える 3

12

0.11.1 (今週リリース) から、replace に正規表現に置き換える新しいオプションが追加されたため、これが可能になります。

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
于 2013-05-20T11:29:21.943 に答える
1

受け入れられた回答のコメントに回答する: 特定の列については、インプレースで行わないようにしてください。

df['Column1'] = df['Column1'].replace('%','',regex=True).astype('float')/100
于 2015-05-05T19:38:14.020 に答える