Saltar al contenido

Intentando eliminar comas y signos de dólares con Pandas en Python

Si encuentras algo que te causa duda puedes dejarlo en la sección de comentarios y te responderemos lo más rápido posible.

Solución:

Tienes que acceder a la str attribute según http://pandas.pydata.org/pandas-docs/stable/text.html

df1['Avg_Annual'] = df1['Avg_Annual'].str.replace(',', '')
df1['Avg_Annual'] = df1['Avg_Annual'].str.replace('$', '')
df1['Avg_Annual'] = df1['Avg_Annual'].astype(int)

alternativamente;

df1['Avg_Annual'] = df1['Avg_Annual'].str.replace(',', '').str.replace('$', '').astype(int)

si desea priorizar el tiempo dedicado a escribir sobre la legibilidad.

Robado descaradamente de esta respuesta … peroesa respuesta se trata solo de cambiar un carácter y no completa la genialidad: dado que se necesita un diccionario, puede reemplazar cualquier número de caracteres a la vez, así como en cualquier número de columnas.

# if you want to operate on multiple columns, put them in a list like so:
cols = ['col1', 'col2', ..., 'colN']

# pass them to df.replace(), specifying each char and it's replacement:
df[cols] = df[cols].replace('$': '', ',': '', regex=True)

@shivsn captó que necesitas usar regex=True; ya sabías sobre replace (pero tampoco mostraste intentar usarlo en varias columnas o en el signo de dólar y la coma simultáneamente).

Esta respuesta simplemente explica los detalles que encontré de otros en un lugar para aquellos como yo (por ejemplo, novatos para python un pandas). Espero que sea útil.

La respuesta de @bernie es acertada para su problema. Aquí está mi opinión sobre el problema general de cargar datos numéricos en pandas.

A menudo, la fuente de los datos son los informes generados para el consumo directo. De ahí la presencia de formato extra como %, separador de miles, símbolos de moneda, etc. Todos estos son útiles para leer pero causan problemas para el analizador predeterminado. Mi solución es encasillar la columna para string, reemplace estos símbolos uno por uno y luego reprodúzcalos a los formatos numéricos apropiados. Tener una función repetitiva que retiene solo [0-9.] es tentador pero causa problemas cuando el separador de mil y el decimal se intercambian, también en el caso de la notación científica. Aquí está mi código que envuelvo en una función y aplico según sea necesario.

df[col] = df[col].astype(str)  # cast to string

# all the string surgery goes in here
df[col] = df[col].replace('$', '')
df[col] = df[col].replace(',', '')  # assuming ',' is the thousand's separator in your locale
df[col] = df[col].replace('%', '')

df[col] = df[col].astype(float)  # cast back to appropriate type

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *