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
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.