Ik heb een dataframe in panda’s en ik probeer erachter te komen wat de soorten waarden zijn. Ik weet niet zeker welk type kolom 'Test'
is. Wanneer ik echter myFrame['Test'].dtype
uitvoer, krijg ik;
dtype('O')
Wat betekent dit?
Antwoord 1, autoriteit 100%
Het betekent:
'O' (Python) objects
Bron.
Het eerste teken specificeert het soort gegevens en de overige tekens specificeren het aantal bytes per item, behalve Unicode, waar het wordt geïnterpreteerd als het aantal tekens. De artikelgrootte moet overeenkomen met een bestaand type, anders ontstaat er een fout. De ondersteunde soorten zijn:
naar een bestaand type, anders wordt er een fout gegenereerd. De ondersteunde soorten zijn:
'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)
Een ander antwoordhelpt indien nodig bij het controleren van type
s.
Antwoord 2, autoriteit 26%
Als je dtype('O')
in het dataframe ziet, betekent dit Panda’s string.
Wat is dtype
?
Iets dat hoort bij pandas
of numpy
, of beide, of iets anders? Als we de panda-code onderzoeken:
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
Het zal als volgt worden weergegeven:
float int datetime string
0 1.0 1 2018-03-10 foo
---
float64 int64 datetime64[ns] object
---
dtype('O')
Je kunt de laatste interpreteren als Pandas dtype('O')
of Pandas-object dat een Python-type string is, en dit komt overeen met Numpy string_
, of unicode_
typen.
Pandas dtype Python type NumPy type Usage
object str string_, unicode_ Text
Zoals Don Quichot op ass is, is Pandas op Numpy en Numpy begrijpt de onderliggende architectuur van uw systeem en gebruikt de klasse numpy.dtype
daarvoor.
Datatype-object is een instantie van de klasse numpy.dtype
die het gegevenstype precieserbegrijpt, waaronder:
- Type gegevens (integer, float, Python-object, enz.)
- Grootte van de gegevens (hoeveel bytes bevat bijvoorbeeld het gehele getal)
- Bytevolgorde van de gegevens (little-endian of big-endian)
- Als het gegevenstype gestructureerd is, een aggregaat van andere gegevenstypen (bijvoorbeeld een beschrijving van een array-item dat bestaat uit een geheel getal en een float)
- Wat zijn de namen van de “velden” van de structuur
- Wat is het gegevenstype van elk veld
- Welk deel van het geheugenblok heeft elk veld
- Als het gegevenstype een subarray is, wat is dan de vorm en het gegevenstype
In de context van deze vraag behoort dtype
tot zowel pands als numpy en in het bijzonder betekent dtype('O')
dat we de string verwachten.
Hier is wat code om te testen met uitleg:
Als we de dataset als woordenboek hebben
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)
De laatste regels zullen het dataframe onderzoeken en de uitvoer noteren:
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
Allerlei verschillende dtypes
df.iloc[1,:] = np.nan
df.iloc[2,:] = None
Maar als we proberen np.nan
of None
in te stellen, heeft dit geen invloed op de oorspronkelijke kolom dtype. De uitvoer zal als volgt zijn:
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
Dus np.nan
of None
zullen de kolommen dtype
niet wijzigen, tenzij we alle kolomrijen instellen op np.nan
of None
. In dat geval wordt de kolom respectievelijk float64
of object
.
U kunt ook proberen enkele rijen in te stellen:
df.iloc[3,:] = 0 # will convert datetime to object only
df.iloc[4,:] = '' # will convert all columns to object
En om hier op te merken, als we een tekenreeks in een niet-tekenreekskolom plaatsen, wordt het tekenreeks of object dtype
.
Antwoord 3, autoriteit 11%
Het betekent “een python-object”, d.w.z. niet een van de ingebouwde scalaire typen die door numpy worden ondersteund.
np.array([object()]).dtype
=> dtype('O')
Antwoord 4, autoriteit 7%
‘O’ staat voor object.
#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
De eerste regel retourneert: dtype('O')
De regel met het printstatement geeft het volgende terug: object