Dtype ('O'), trong gấu trúc là gì?


106

Tôi có một khung dữ liệu ở gấu trúc và tôi đang cố gắng tìm ra các loại giá trị của nó. Tôi không chắc loại cột là gì 'Test'. Tuy nhiên, khi tôi chạy myFrame['Test'].dtype, tôi nhận được;

dtype('O')

Điều đó có nghĩa là gì?


9
pandastự do sử dụng objectdtype khi các cột chứa các giá trị hỗn hợp (chuỗi, số, nan).
hpaulj

@quant nó có nghĩa là chuỗi gấu trúc giống như tôi đã cố gắng chỉ ra câu trả lời
prosti

Câu trả lời:


107

Nó có nghĩa là:

'O'     (Python) objects

Nguồn .

Ký tự đầu tiên chỉ định loại dữ liệu và các ký tự còn lại chỉ định số byte cho mỗi mục, ngoại trừ Unicode, nơi nó được hiểu là số ký tự. Kích thước mặt hàng phải tương ứng với loại hiện có, nếu không sẽ xuất hiện lỗi. Các loại được hỗ trợ thuộc loại hiện có, nếu không sẽ xảy ra lỗi. Các loại được hỗ trợ là:

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

Một câu trả lời khác giúp nếu cần kiểm tra types.


19

Khi bạn nhìn thấy dtype('O')bên trong khung dữ liệu, điều này có nghĩa là chuỗi Pandas.

dtypegì?

Thứ gì đó thuộc về pandashoặc numpy, hoặc cả hai, hoặc thứ gì khác? Nếu chúng ta kiểm tra mã gấu trúc:

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

Nó sẽ xuất ra như thế này:

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

Bạn có thể diễn giải cuối cùng là dtype('O')đối tượng Pandas hoặc Pandas là chuỗi loại Python và điều này tương ứng với Numpy string_hoặc unicode_các loại.

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

Giống như Don Quixote đang ở trên mông, Pandas ở trên Numpy và Numpy hiểu kiến ​​trúc cơ bản của hệ thống của bạn và sử dụng lớp numpy.dtypecho điều đó.

Đối tượng kiểu dữ liệu là một thể hiện của numpy.dtypelớp hiểu kiểu dữ liệu chính xác hơn bao gồm:

  • Loại dữ liệu (số nguyên, float, đối tượng Python, v.v.)
  • Kích thước của dữ liệu (bao nhiêu byte trong ví dụ như số nguyên)
  • Thứ tự byte của dữ liệu (little-endian hoặc big-endian)
  • Nếu kiểu dữ liệu có cấu trúc, một tập hợp các kiểu dữ liệu khác, (ví dụ: mô tả một mục mảng bao gồm một số nguyên và một số thực)
  • Tên của các "trường" của cấu trúc là gì
  • Kiểu dữ liệu của mỗi trường là gì
  • Mỗi trường chiếm phần nào của khối bộ nhớ
  • Nếu kiểu dữ liệu là mảng con thì hình dạng và kiểu dữ liệu của nó là gì

Trong ngữ cảnh của câu hỏi này dtypethuộc về cả pands và numpy và đặc biệt dtype('O')có nghĩa là chúng tôi mong đợi chuỗi.


Đây là một số mã để kiểm tra với giải thích: Nếu chúng tôi có tập dữ liệu dưới dạng từ điển

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)

Các dòng cuối cùng sẽ kiểm tra khung dữ liệu và lưu ý kết quả đầu ra:

   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

Tất cả các loại khác nhau dtypes

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

Nhưng nếu chúng ta cố gắng đặt np.nanhoặc Noneđiều này sẽ không ảnh hưởng đến loại cột ban đầu. Đầu ra sẽ như thế này:

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

Vì vậy, np.nanhoặc Nonesẽ không thay đổi các cột dtype, trừ khi chúng tôi đặt tất cả các hàng cột thành np.nanhoặc None. Trong trường hợp đó, cột sẽ trở thành float64hoặcobject tương ứng.

Bạn cũng có thể thử đặt các hàng đơn:

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

Và lưu ý ở đây, nếu chúng ta đặt chuỗi bên trong một cột không phải chuỗi thì nó sẽ trở thành chuỗi hoặc đối tượng dtype.


14

Nó có nghĩa là "một đối tượng python", tức là không phải là một trong các loại vô hướng nội trang được hỗ trợ bởi numpy.

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

6

'O' là viết tắt của đối tượng .

#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

Dòng đầu tiên trả về: dtype('O')

Dòng có câu lệnh in trả về như sau: object

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.