Convert currency to float (and parentheses indicate negative amounts)

Question:

I have a df with currency:

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

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

I want to convert the ‘Currency’ dtype to float but I am having trouble with the parentheses string (which indicate a negative amount). This is my current code:

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

which produces an error:

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

What I want as dtype float is:

     Currency
0       1.00
1   2000.00
2  -3000.00
Asked By: collarblind

||

Answers:

Just add ) to the existing command, and then convert ( to - to make numbers in parentheses negative. Then convert to float.

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

   Currency
0         1
1      2000
2     -3000
Answered By: JohnE

This is if you want to make sure its added to the DataFrame.

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

Answered By: Redz Ch
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.