tutorial tablas seleccionar recorrer notebook graficar filtrar espaƱol datos data con columnas python pandas dataframe data-cleansing

python - tablas - seleccionar columnas de un dataframe pandas



Buscar todas las columnas de marco de datos en pandas cuyo tipo es flotante o un tipo particular? (2)

Esto es conciso:

# select the float columns df_num = df.select_dtypes(include=[np.float]) # select non-numeric columns df_num = df.select_dtypes(exclude=[np.number])

Tengo un dataframe, df, que tiene algunas columnas de tipo float64, mientras que las otras son de objeto. Debido a la naturaleza mixta, no puedo usar

df.fillna(''unknown'') #getting error "ValueError: could not convert string to float:"

como el error ocurrió con las columnas cuyo tipo es float64 (¡qué mensaje de error engañoso!)

entonces desearía poder hacer algo como

for col in df.columns[<dtype == object>]: df[col] = df[col].fillna("unknown")

Entonces mi pregunta es si existe alguna expresión de filtro que pueda usar con df.columns.

Supongo que alternativamente, menos elegantemente, podría hacer:

for col in df.columns: if (df[col].dtype == dtype(''O'')): # for object type df[col] = df[col].fillna('''') # still puzzled, only empty string works as replacement, ''unknown'' would not work for certain value leading to error of "ValueError: Error parsing datetime string "unknown" at position 0"

También me gustaría saber por qué en el código anterior reemplazando '''' por ''desconocido'' el código funcionaría para ciertas celdas pero falló con una celda con el error de "ValueError: Error al analizar la cadena de fecha y hora" desconocido "en la posición 0"

¡Muchas gracias!

Yu


Puede ver cuál es el tipo para todas las columnas que usan el atributo dtypes:

In [11]: df = pd.DataFrame([[1, ''a'', 2.]]) In [12]: df Out[12]: 0 1 2 0 1 a 2 In [13]: df.dtypes Out[13]: 0 int64 1 object 2 float64 dtype: object In [14]: df.dtypes == object Out[14]: 0 False 1 True 2 False dtype: bool

Para acceder a las columnas del objeto:

In [15]: df.loc[:, df.dtypes == object] Out[15]: 1 0 a

Creo que es más explícito de usar (no estoy seguro de que funcione aquí):

In [16]: df.loc[:, df.dtypes == object] = df.loc[:, df.dtypes == object].fillna('''')

Diciendo eso, te recomiendo que uses NaN para los datos faltantes .