Подтвердить что ты не робот

Pandas преобразовать строки для float для нескольких столбцов в dataframe

Я новичок в pandas и пытаюсь понять, как преобразовать несколько столбцов, отформатированных как строки для float64. В настоящее время я делаю следующее, но похоже, что apply() или applymap() должны иметь возможность выполнить эту задачу еще более эффективно... к сожалению, я слишком много новобранец, чтобы понять, как это сделать. В настоящее время значения представляют собой проценты, отформатированные как строки, такие как "15.5%"

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

Ответ 1

Начиная с 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

Ответ 2

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

Ответ 3

ответ на комментарий в принятом ответе: для определенных столбцов убедитесь, что вы не делаете это на месте.

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