Pandalarda dtype ('O') nedir?


108

Pandalarda bir veri çerçevem ​​var ve değerlerinin ne tür olduğunu anlamaya çalışıyorum. Sütunun türünün ne olduğundan emin değilim 'Test'. Ancak myFrame['Test'].dtypekoştuğumda;

dtype('O')

Ne anlama geliyor?


9
pandasobjectsütunlar karışık değerler (dizeler, sayılar, nan) içerdiğinde serbestçe dtype kullanır .
hpaulj

@quant o benim noktaya çalıştı gibi pandalar dize demektir cevap
prosti

Yanıtlar:


109

Anlamı:

'O'     (Python) objects

Kaynak .

İlk karakter, veri türünü belirtir ve kalan karakterler, karakter sayısı olarak yorumlandığı Unicode hariç, öğe başına bayt sayısını belirtir. Öğe boyutu mevcut bir türe karşılık gelmelidir, aksi takdirde bir hata ortaya çıkar. Desteklenen türler, mevcut bir türdür veya bir hata ortaya çıkar. Desteklenen türler şunlardır:

'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)

Kontrol gerekirse başka bir cevap yardımcı olur type.


20

Gördüğünüzde dtype('O')dataframe bu anlamına Pandalar dize içinde.

Nedir dtype?

pandasYa numpyda her ikisine ya da her ikisine ait olan bir şey ya da başka bir şey? Pandaların kodunu incelersek:

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

Şöyle çıktı:

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

dtype('O')Sonuncuyu string_, Python tipi dizesi olan Pandas veya Pandas nesnesi olarak yorumlayabilirsiniz ve bu, Numpy veya unicode_türlere karşılık gelir .

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

Don Kişot'un kıçta olduğu gibi, Pandalar da Numpy'de ve Numpy sisteminizin temel mimarisini anlıyor ve bunun için sınıfı kullanıyor numpy.dtype.

Veri türü nesnesi, numpy.dtypeveri türünü daha kesin olarak anlayan bir sınıf örneğidir :

  • Verilerin türü (tam sayı, kayan nokta, Python nesnesi vb.)
  • Verinin boyutu (örneğin tamsayıda kaç bayt vardır)
  • Verinin bayt sırası (küçük endian veya big-endian)
  • Veri türü yapılandırılmışsa, diğer veri türlerinin bir toplamı (örneğin, bir tam sayı ve bir kayan noktadan oluşan bir dizi öğesini açıklamak)
  • Yapının "alanlarının" adları nelerdir
  • Her alanın veri türü nedir
  • Her alanın bellek bloğunun hangi bölümünü kapladığı
  • Veri türü bir alt diziyse, şekli ve veri türü nedir

Bu soru bağlamında dtypehem pand hem de numpy'ye aittir ve özellikle dtype('O')dizeyi beklediğimiz anlamına gelir.


İşte açıklama ile test etmek için bazı kodlar: Sözlük olarak veri kümesine sahipsek

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)

Son satırlar veri çerçevesini inceleyecek ve çıktıyı not edecektir:

   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

Her çeşit farklı dtypes

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

Ama ayarlamaya çalışırsak, np.nanyoksa Nonebu orijinal sütun dtype'ini etkilemeyecektir. Çıktı şöyle olacak:

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

Tüm sütun satırlarını veya olarak ayarlamadığımız sürece sütunları öyle np.nanveya Noneböyle değiştirmeyeceğiz . Bu durumda sütun veya sırasıyla olacaktır .dtypenp.nanNonefloat64object

Ayrıca tek satırlar ayarlamayı deneyebilirsiniz:

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

Ve burada not etmek gerekirse, dizgeyi dizge olmayan bir sütunun içine ayarlarsak, dizge veya nesne olur dtype.


14

"Bir python nesnesi" anlamına gelir, yani numpy tarafından desteklenen yerleşik skaler türlerden biri değildir.

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

6

'O' nesne anlamına gelir .

#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

İlk satır şunu döndürür: dtype('O')

Print deyiminin bulunduğu satır şunu döndürür: object

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.