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?

1
Bahlsen 1 oct. 2019 a las 10:26

4 respuestas

La mejor respuesta

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=',')
3
Erfan 1 oct. 2019 a las 07:37

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.

2
Matěj Račinský 1 oct. 2019 a las 07:31

Puede convertir todo el tipo de datos de columna a numérico

import pandas as pd
df['GM'] = pd.to_numeric(df['GM'])
1
Rajith Thennakoon 1 oct. 2019 a las 07:30

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)
0
cbuchart 1 oct. 2019 a las 07:45
58179925