Quiero seleccionar todos los valores mayores de 8000 dentro de un marco de datos de pandas.
new_df = df.loc[df['GM'] > 8000]
Sin embargo, no está funcionando. Creo que el problema es que el valor proviene de un archivo de Excel y el número se interpreta como una cadena, p. "1.111,52". ¿Sabes cómo puedo convertir una cadena de este tipo en flotante / int para compararla correctamente?
4 respuestas
Tomado de la documentación de pd.read_excel
:
Separador de miles para analizar columnas de cadenas a numéricas. Tenga en cuenta que este parámetro solo es necesario para las columnas almacenadas como TEXTO en Excel, cualquier columna numérica se analizará automáticamente, independientemente del formato de visualización.
Esto significa que pandas
verifica el tipo de formato almacenado en Excel. Si esto fue numeric
en Excel, la conversión debería ser correcta. Si su columna era string
, intente usar:
df = pd.read_excel('filename.xlsx', thousands='.')
Si tiene un archivo csv
, puede resolverlo especificando el carácter thousands
+ decimal
:
df = pd.read_csv('filename.csv', thousands='.', decimal=',')
Puede ver el valor de df.dtypes
para ver cuál es el tipo de cada columna. Luego, si el tipo de columna no es como desea, puede cambiarlo en df['GM'].astype(float)
, y luego new_df = df.loc[df['GM'].astype(float) > 8000]
debería funcionar como lo desee.
Puede convertir todo el tipo de datos de columna a numérico
import pandas as pd
df['GM'] = pd.to_numeric(df['GM'])
Puede ver el tipo de datos de su columna utilizando la función type
. Para convertirlo en flotante, utilice la función astype
de la siguiente manera:
df['GM'].astype(float)