type dtypes data convert column change cast python pandas numpy dataframe types

python - dtypes - ¿Qué es dtype(''O'')?



pandas dtypes (4)

Cuando vea dtype(''O'') dentro del marco de datos, esto significa cadena de Pandas.

¿Qué es dtype ?

¿Algo que pertenece a los pandas o numpy , o ambos, o algo más? Si examinamos el código de pandas:

df = pd.DataFrame({''float'': [1.0], ''int'': [1], ''datetime'': [pd.Timestamp(''20180310'')], ''string'': [''foo'']}) print(df) print(df[''float''].dtype,df[''int''].dtype,df[''datetime''].dtype,df[''string''].dtype) df[''string''].dtype

Saldrá así:

float int datetime string 0 1.0 1 2018-03-10 foo --- float64 int64 datetime64[ns] object --- dtype(''O'')

Puede interpretar el último como Pandas dtype(''O'') u objeto Pandas, que es una cadena de tipo Python, y esto corresponde a Numpy string_ , o unicode_ tipos.

Pandas dtype Python type NumPy type Usage object str string_, unicode_ Text

Al igual que Don Quijote está en el culo, Pandas está en Numpy y Numpy entiende la arquitectura subyacente de su sistema y utiliza la clase numpy.dtype para eso.

El objeto de tipo de datos es una instancia de la clase numpy.dtype que comprende el tipo de datos más preciso, incluyendo:

  • Tipo de datos (entero, flotante, objeto Python, etc.)
  • Tamaño de los datos (cuántos bytes hay, por ejemplo, el entero)
  • Orden de bytes de los datos (little-endian o big-endian)
  • Si el tipo de datos está estructurado, un agregado de otros tipos de datos (por ejemplo, que describe un elemento de matriz que consiste en un entero y un flotante)
  • ¿Cuáles son los nombres de los "campos" de la estructura?
  • ¿Cuál es el tipo de datos de cada campo?
  • Qué parte del bloque de memoria toma cada campo
  • Si el tipo de datos es una submatriz, ¿cuál es su forma y tipo de datos?

En el contexto de esta pregunta, dtype pertenece a pands y numpy y, en particular, dtype(''O'') significa que esperamos la cadena.

Aquí hay un código para probar con explicación: si tenemos el conjunto de datos como diccionario

import pandas as pd import numpy as np from pandas import Timestamp data={''id'': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5}, ''date'': {0: Timestamp(''2018-12-12 00:00:00''), 1: Timestamp(''2018-12-12 00:00:00''), 2: Timestamp(''2018-12-12 00:00:00''), 3: Timestamp(''2018-12-12 00:00:00''), 4: Timestamp(''2018-12-12 00:00:00'')}, ''role'': {0: ''Support'', 1: ''Marketing'', 2: ''Business Development'', 3: ''Sales'', 4: ''Engineering''}, ''num'': {0: 123, 1: 234, 2: 345, 3: 456, 4: 567}, ''fnum'': {0: 3.14, 1: 2.14, 2: -0.14, 3: 41.3, 4: 3.14}} df = pd.DataFrame.from_dict(data) #now we have a dataframe print(df) print(df.dtypes)

Las últimas líneas examinarán el marco de datos y anotarán la salida:

id date role num fnum 0 1 2018-12-12 Support 123 3.14 1 2 2018-12-12 Marketing 234 2.14 2 3 2018-12-12 Business Development 345 -0.14 3 4 2018-12-12 Sales 456 41.30 4 5 2018-12-12 Engineering 567 3.14 id int64 date datetime64[ns] role object num int64 fnum float64 dtype: object

Todo tipo de diferentes dtypes

df.iloc[1,:] = np.nan df.iloc[2,:] = None

Pero si tratamos de establecer np.nan o None esto no afectará el tipo de columna original. La salida será así:

print(df) print(df.dtypes) id date role num fnum 0 1.0 2018-12-12 Support 123.0 3.14 1 NaN NaT NaN NaN NaN 2 NaN NaT None NaN NaN 3 4.0 2018-12-12 Sales 456.0 41.30 4 5.0 2018-12-12 Engineering 567.0 3.14 id float64 date datetime64[ns] role object num float64 fnum float64 dtype: object

Entonces np.nan o None no cambiarán las columnas dtype , a menos que establezcamos todas las filas de columnas en np.nan o None . En ese caso, la columna se convertirá en float64 u object respectivamente.

También puede intentar establecer filas individuales:

df.iloc[3,:] = 0 # will convert datetime to object only df.iloc[4,:] = '''' # will convert all columns to object

Y para tener en cuenta aquí, si establecemos una cadena dentro de una columna sin cadena, se convertirá en una cadena o un tipo de objeto.

Tengo un marco de datos en pandas y estoy tratando de averiguar cuáles son los tipos de sus valores. No estoy seguro de cuál es el tipo de columna ''Test'' . Sin embargo, cuando ejecuto myFrame[''Test''].dtype , obtengo;

dtype(''O'')

¿Qué significa esto?


''O'' significa objeto .

#Loading a csv file as a dataframe import pandas as pd train_df = pd.read_csv(''train.csv'') col_name = ''Name of Employee'' #Checking the datatype of column name train_df[col_name].dtype #Instead try printing the same thing print train_df[col_name].dtype

La primera línea devuelve: dtype(''O'')

La línea con la declaración de impresión devuelve lo siguiente: object


Significa "un objeto python", es decir, no es uno de los tipos escalares incorporados admitidos por numpy.

np.array([object()]).dtype => dtype(''O'')


Significa:

''O'' (Python) objects

Source

El primer carácter especifica el tipo de datos y los caracteres restantes especifican el número de bytes por elemento, excepto para Unicode, donde se interpreta como el número de caracteres. El tamaño del elemento debe corresponder a un tipo existente, o se generará un error. Los tipos admitidos son de un tipo existente o se generará un error. Los tipos admitidos son:

''b'' boolean ''i'' (signed) integer ''u'' unsigned integer ''f'' floating-point ''c'' complex-floating point ''O'' (Python) objects ''S'', ''a'' (byte-)string ''U'' Unicode ''V'' raw data (void)

Otra answer ayuda si es necesario verificar el type s.