2015-07-20 9 views
13

ich eine df mit Währung haben:Währung umrechnen zu schweben (und Klammern geben negative Beträge)

df = pd.DataFrame({'Currency':['$1.00','$2,000.00','(3,000.00)']}) 

    Currency 
0  $1.00 
1 $2,000.00 
2 (3,000.00) 

Ich möchte die ‚Währung‘ konvertieren dtype zu schwimmen, aber ich habe Probleme mit der Klammern string (die einen negativen Betrag angeben). Dies ist meine aktuellen Code:

df[['Currency']] = df[['Currency']].replace('[\$,]','',regex=True).astype(float) 

, die einen Fehler erzeugt:

ValueError: could not convert string to float: (3000.00) 

Was ich will, wie dtype float ist:

 Currency 
0  1.00 
1 2000.00 
2 -3000.00 

Antwort

25

Fügen Sie einfach ) dem bestehenden Befehl ein, und dann konvertieren ( zu -, um Zahlen in Klammern negativ zu machen. Dann in float konvertieren.

(df['Currency'].replace('[\$,)]','', regex=True) 
       .replace('[(]','-', regex=True).astype(float)) 

    Currency 
0   1 
1  2000 
2  -3000 
+1

@George daran arbeiten hier bekommst du es von JohnE. schneller toll. –

0

ist dies besonders, wenn Sie an den Datenrahmen sicher, dass seine hinzugefügt machen möchten, wenn Sie viele Spalten haben, die die durchschnittliche Datenrahmen hat, so können Sie

df['Currency']=(df['Currency'].replace('[\$,)]','', regex=True) .replace('[(]','-', regex=True).astype(float))