Ho un dataframe in Panda e sto cercando di capire quali sono i tipi dei suoi valori. Non sono sicuro di quale sia il tipo di colonna 'Test'
. Tuttavia, quando corro myFrame['Test'].dtype
, ottengo;
dtype('O')
Cosa significa questo?
Ho un dataframe in Panda e sto cercando di capire quali sono i tipi dei suoi valori. Non sono sicuro di quale sia il tipo di colonna 'Test'
. Tuttavia, quando corro myFrame['Test'].dtype
, ottengo;
dtype('O')
Cosa significa questo?
Risposte:
Significa:
'O' (Python) objects
Fonte .
Il primo carattere specifica il tipo di dati e i caratteri rimanenti specificano il numero di byte per elemento, ad eccezione di Unicode, dove viene interpretato come il numero di caratteri. La dimensione dell'elemento deve corrispondere a un tipo esistente o verrà generato un errore. I tipi supportati appartengono a un tipo esistente o verrà generato un errore. I tipi supportati sono:
'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)
Un'altra risposta aiuta se necessario controllare type
s.
dtype('O')
all'interno del dataframe questo significa stringa Pandas.Che cos'è dtype
?
Qualcosa che appartiene a pandas
o numpy
, o entrambi, o qualcos'altro? Se esaminiamo il codice dei panda:
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
Produrrà in questo modo:
float int datetime string
0 1.0 1 2018-03-10 foo
---
float64 int64 datetime64[ns] object
---
dtype('O')
Puoi interpretare l'ultimo come dtype('O')
oggetto Pandas o Pandas che è una stringa di tipo Python, e questo corrisponde a Numpy string_
, o unicode_
types.
Pandas dtype Python type NumPy type Usage
object str string_, unicode_ Text
Come Don Chisciotte è in culo, Pandas è su Numpy e Numpy capisce l'architettura sottostante del tuo sistema e usa la classe numpy.dtype
per questo.
L'oggetto del tipo di dati è un'istanza della numpy.dtype
classe che comprende il tipo di dati più preciso, tra cui:
Nel contesto di questa domanda dtype
appartiene sia a pands che a numpy e in particolare dtype('O')
significa che ci aspettiamo la stringa.
Ecco un po 'di codice per il test con spiegazione: Se abbiamo il set di dati come dizionario
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)
Le ultime righe esamineranno il dataframe e annoteranno l'output:
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
Tutto diverso dtypes
df.iloc[1,:] = np.nan
df.iloc[2,:] = None
Ma se proviamo a impostare np.nan
o None
questo non influirà sulla colonna originale dtype. L'output sarà così:
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
Quindi np.nan
o None
non cambierà le colonne dtype
, a meno che non impostiamo tutte le righe delle colonne su np.nan
o None
. In quel caso la colonna diventerà float64
o object
rispettivamente.
Puoi provare anche a impostare singole righe:
df.iloc[3,:] = 0 # will convert datetime to object only
df.iloc[4,:] = '' # will convert all columns to object
E da notare qui, se impostiamo una stringa all'interno di una colonna non stringa, diventerà stringa o oggetto dtype
.
'O' sta per oggetto .
#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 prima riga restituisce: dtype('O')
La riga con l'istruzione print restituisce quanto segue: object
pandas
usa liberamenteobject
dtype quando le colonne contengono valori misti (stringhe, numeri, nan).