web-dev-qa-db-fra.com

Convertir la devise en float (et les parenthèses indiquent les montants négatifs)

J'ai un df avec de la monnaie:

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

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

Je souhaite convertir le type de devise 'Currency' en float, mais je rencontre des problèmes avec la chaîne de parenthèses (qui indique un montant négatif). Ceci est mon code actuel:

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

ce qui produit une erreur:

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

Ce que je veux en tant que type float, c'est:

     Currency
0       1.00
1   2000.00
2  -3000.00
16
I am not George

Ajoutez simplement ) à la commande existante, puis convertissez ( en - pour rendre les nombres entre parenthèses négatifs. Puis convertis pour flotter.

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

   Currency
0         1
1      2000
2     -3000
29
JohnE

si vous voulez vous assurer qu'il est ajouté au DataFrame, en particulier si vous avez beaucoup de colonnes dans le DataFrame moyen pour pouvoir y travailler

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

0
Redz Ch