Wat is dtype(‘O’), in panda’s?

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'].dtypeuitvoer, 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 types.


Antwoord 2, autoriteit 26%

Als je dtype('O')in het dataframe ziet, betekent dit Panda’s string.

Wat is dtype?

Iets dat hoort bij pandasof 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.dtypedaarvoor.

Datatype-object is een instantie van de klasse numpy.dtypedie 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 dtypetot 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.nanof Nonein 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.nanof Nonezullen de kolommen dtypeniet wijzigen, tenzij we alle kolomrijen instellen op np.nanof None. In dat geval wordt de kolom respectievelijk float64of 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

Other episodes