Convertir moneda con $ a números en pandas Python

Tengo los siguientes datos en el dataframe de pandas:

state 1st 2nd 3rd 0 California $11,593,820 $109,264,246 $8,496,273 1 New York $10,861,680 $45,336,041 $6,317,300 2 Florida $7,942,848 $69,369,589 $4,697,244 3 Texas $7,536,817 $61,830,712 $5,736,941 

Quiero realizar un análisis simple (p. Ej., Sum, groupby) con tres columnas (1ª, 2ª, 3ª), pero el tipo de datos de esas tres columnas es objeto (o cadena).

Así que utilicé el siguiente código para la conversión de datos:

 data = data.convert_objects(convert_numeric=True) 

Pero, la conversión no funciona, tal vez, debido al signo de dólar. ¿Cualquier sugerencia?

La respuesta de @EdChum es inteligente y funciona bien. Pero ya que hay más de una forma de hornear un pastel … ¿por qué no usar expresiones regulares? Por ejemplo:

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

Para mí, eso es un poco más legible.

Puede usar los métodos str vectorizados para reemplazar los caracteres no deseados y luego convertir el tipo a int:

 In [81]: df[df.columns[1:]] = df[df.columns[1:]].apply(lambda x: x.str.replace('$','')).apply(lambda x: x.str.replace(',','')).astype(np.int64) df Out[81]: state 1st 2nd 3rd index 0 California 11593820 109264246 8496273 1 New York 10861680 45336041 6317300 2 Florida 7942848 69369589 4697244 3 Texas 7536817 61830712 5736941 

Se ha confirmado el cambio de tipo:

 In [82]: df.info()  Int64Index: 4 entries, 0 to 3 Data columns (total 4 columns): state 4 non-null object 1st 4 non-null int64 2nd 4 non-null int64 3rd 4 non-null int64 dtypes: int64(3), object(1) memory usage: 160.0+ bytes 

De otra manera:

 In [108]: df[df.columns[1:]] = df[df.columns[1:]].apply(lambda x: x.str[1:].str.split(',').str.join('')).astype(np.int64) df Out[108]: state 1st 2nd 3rd index 0 California 11593820 109264246 8496273 1 New York 10861680 45336041 6317300 2 Florida 7942848 69369589 4697244 3 Texas 7536817 61830712 5736941 

También puede utilizar la locale siguiente manera

 import locale import pandas as pd locale.setlocale(locale.LC_ALL,'') df['1st']=df.1st.map(lambda x: locale.atof(x.strip('$'))) 

Tenga en cuenta que el código anterior se probó en Python 3 y en el entorno de Windows