2013-05-20 13 views
12

Ich bin neu in Pandas und versuchen herauszufinden, wie mehrere Spalten, die als Strings zu float64 formatiert sind, zu konvertieren. Momentan mache ich das unten, aber es scheint, dass apply() oder applymap() in der Lage sein sollte, diese Aufgabe noch effizienter zu erledigen ... leider bin ich ein bisschen zu viel von einem Anfänger, um herauszufinden, wie. Derzeit sind die Werte als Strings wie '15 0,5%‘Pandas konvertieren Zeichenfolgen zu Float für mehrere Spalten in Datenrahmen

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

Antwort

11

in 0.11.1 Ab (coming out in dieser Woche), ersetzen Sie hat eine neue Option mit einem regulären Ausdruck zu ersetzen, so dass dies möglich wird,

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) 

Und ein bisschen schneller

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

Können Sie mir bitte sagen, wie kann ich dies für bestimmte implementieren Säulen? 'df ['Column1']. replace ('%', '', regex = True) .type ('float')/100' hat nicht funktioniert. – erantdo

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

* etwas * effizienter zu verwenden 'df1.applymap (lambda x: float (x [: - 1]))/100' ... –

1

einen Kommentar in der akzeptierte Antwort zu beantworten: für bestimmte Spalten stellen Sie sicher, dass Sie es nicht an Ort und Stelle tun.

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