type dtypes data column change astype python types pandas

python - data - pandas dtypes



Cadenas en un DataFrame, pero dtype es un objeto (1)

El objeto dtype viene de NumPy, describe el tipo de elemento en un ndarray. Cada elemento en un ndarray debe tener el mismo tamaño en byte. Para int64 y float64, son 8 bytes. Pero para cuerdas, la longitud de la cuerda no es fija. Entonces, en lugar de guardar los bytes de cadenas en el ndarray directamente, los pandas usan el objeto ndarray, que guarda los punteros a los objetos, debido a esto el tipo de este tipo ndarray es el objeto.

Aquí hay un ejemplo:

  • la matriz int64 contiene 4 valores int64.
  • la matriz de objetos contiene 4 punteros a 3 objetos de cadena.

¿Por qué los pandas me dicen que tengo objetos, aunque cada elemento de la columna seleccionada es una cadena, incluso después de una conversión explícita?

Este es mi DataFrame:

<class ''pandas.core.frame.DataFrame''> Int64Index: 56992 entries, 0 to 56991 Data columns (total 7 columns): id 56992 non-null values attr1 56992 non-null values attr2 56992 non-null values attr3 56992 non-null values attr4 56992 non-null values attr5 56992 non-null values attr6 56992 non-null values dtypes: int64(2), object(5)

Cinco de ellos son dtype object . Yo explícitamente convierto esos objetos a cadenas:

for c in df.columns: if df[c].dtype == object: print "convert ", df[c].name, " to string" df[c] = df[c].astype(str)

Entonces, df["attr2"] todavía tiene dtype object , aunque el type(df["attr2"].ix[0] revela str , que es correcto.

Pandas distingue entre int64 y float64 y el object . ¿Cuál es la lógica detrás de esto cuando no hay dtype str ? ¿Por qué una str cubierta por un object ?