Apa itu dtype ('O'), di panda?

106

Saya memiliki kerangka data di panda dan saya mencoba mencari tahu apa jenis nilainya. Saya tidak yakin apa jenis kolomnya 'Test'. Namun, saat saya lari myFrame['Test'].dtype, saya mendapatkan;

dtype('O')

Apa artinya ini?

bergalah
sumber
9
pandasbebas menggunakan objectdtype ketika kolom berisi nilai campuran (string, angka, nan).
hpaulj
@quant itu berarti pandas string seperti yang saya coba tunjukkan dalam jawaban
prosti

Jawaban:

107

Itu berarti:

'O'     (Python) objects

Sumber .

Karakter pertama menentukan jenis data dan karakter yang tersisa menentukan jumlah byte per item, kecuali Unicode, di mana itu diartikan sebagai jumlah karakter. Ukuran item harus sesuai dengan tipe yang ada, atau kesalahan akan muncul. Jenis yang didukung adalah untuk jenis yang sudah ada, atau kesalahan akan muncul. Jenis yang didukung adalah:

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

Jawaban lain membantu jika perlu diperiksa type.

jezrael
sumber
19

Ketika kamu melihat dtype('O') di dalam dataframe, ini berarti string Pandas.

apa yang dtype ?

Sesuatu yang dimiliki pandasatau numpy, atau keduanya, atau sesuatu yang lain? Jika kita memeriksa kode 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

Ini akan menghasilkan seperti ini:

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

Anda dapat menafsirkan yang terakhir sebagai objek Pandas dtype('O')atau Pandas yang merupakan jenis string Python, dan ini terkait dengan Numpy string_, atau unicode_types.

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

Seperti Don Quixote di pantat, Pandas ada di Numpy dan Numpy memahami arsitektur yang mendasari sistem Anda dan menggunakan kelas numpy.dtype untuk itu.

Objek tipe data adalah turunan dari numpy.dtypekelas yang memahami tipe data dengan lebih tepat termasuk:

  • Jenis data (integer, float, objek Python, dll.)
  • Ukuran data (berapa byte di misalnya integer)
  • Urutan byte data (little-endian atau big-endian)
  • Jika tipe data terstruktur, agregat tipe data lain, (misalnya, mendeskripsikan item array yang terdiri dari integer dan float)
  • Apa nama dari "bidang" struktur
  • Apa tipe data setiap bidang
  • Bagian mana dari blok memori yang diambil setiap bidang
  • Jika tipe datanya adalah sub-larik, apa bentuk dan tipe datanya

Dalam konteks pertanyaan ini dtypemilik pands dan numpy dan secara khusus dtype('O')berarti kita mengharapkan string.


Berikut beberapa kode untuk pengujian dengan penjelasannya: Jika kita memiliki dataset sebagai kamus

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)

Baris terakhir akan memeriksa kerangka data dan mencatat hasilnya:

   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

Semua jenis berbeda dtypes

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

Tetapi jika kita mencoba untuk mengatur np.nanatau Noneini tidak akan mempengaruhi dtype kolom asli. Outputnya akan seperti ini:

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

Jadi np.nanatau Nonetidak akan mengubah kolom dtype, kecuali kita mengatur semua baris kolom menjadi np.nanatau None. Dalam hal ini, kolom akan menjadi float64atauobject masing masing.

Anda juga dapat mencoba menyetel baris tunggal:

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

Dan yang perlu diperhatikan disini, jika kita mengatur string di dalam kolom non string itu akan menjadi string atau objek dtype.

prosti
sumber
14

Artinya "objek python", yaitu bukan salah satu jenis skalar bawaan yang didukung oleh numpy.

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

'O' berarti objek .

#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

Baris pertama kembali: dtype('O')

Baris dengan pernyataan cetak mengembalikan yang berikut: object

Jeru Luke
sumber