ฉันมีดาต้าเฟรมเป็นหมีแพนด้าและฉันกำลังพยายามหาว่าค่าของมันคืออะไร ฉันไม่แน่ใจว่าประเภทของคอลัมน์'Test'คืออะไร อย่างไรก็ตามเมื่อฉันวิ่งmyFrame['Test'].dtypeฉันได้รับ;
dtype('O')สิ่งนี้หมายความว่า?
ฉันมีดาต้าเฟรมเป็นหมีแพนด้าและฉันกำลังพยายามหาว่าค่าของมันคืออะไร ฉันไม่แน่ใจว่าประเภทของคอลัมน์'Test'คืออะไร อย่างไรก็ตามเมื่อฉันวิ่งmyFrame['Test'].dtypeฉันได้รับ;
dtype('O')สิ่งนี้หมายความว่า?
คำตอบ:
หมายความว่า:
'O'     (Python) objectsอักขระตัวแรกระบุชนิดของข้อมูลและอักขระที่เหลือระบุจำนวนไบต์ต่อไอเท็มยกเว้น Unicode ซึ่งถูกตีความเป็นจำนวนอักขระ ขนาดรายการต้องตรงกับประเภทที่มีอยู่มิฉะนั้นข้อผิดพลาดจะเพิ่มขึ้น ประเภทที่รองรับเป็นประเภทที่มีอยู่มิฉะนั้นข้อผิดพลาดจะเพิ่มขึ้น ประเภทที่รองรับ ได้แก่ :
'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)
อีกคำตอบที่จะช่วยถ้าจำเป็นต้องตรวจสอบtypes
dtype('O')ภายใน dataframe นั่นหมายถึงสตริง Pandasคืออะไรdtype?
สิ่งที่เป็นของpandasหรือnumpyหรือทั้งสองอย่างหรืออย่างอื่น? หากเราตรวจสอบรหัสแพนด้า:
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มันจะออกมาดังนี้:
   float  int   datetime string    
0    1.0    1 2018-03-10    foo
---
float64 int64 datetime64[ns] object
---
dtype('O')คุณสามารถตีความสิ่งสุดท้ายเป็นdtype('O')วัตถุ Pandas หรือ Pandas ซึ่งเป็นสตริงประเภท Python และสิ่งนี้สอดคล้องกับ Numpy string_หรือunicode_ประเภท
Pandas dtype    Python type     NumPy type          Usage
object          str             string_, unicode_   Textเช่นเดียวกับที่ Don Quixote กำลังทำงานอยู่ Pandas อยู่บน Numpy และ Numpy เข้าใจสถาปัตยกรรมพื้นฐานของระบบของคุณและใช้คลาสnumpy.dtypeสำหรับสิ่งนั้น
ออบเจ็กต์ประเภทข้อมูลเป็นอินสแตนซ์ของnumpy.dtypeคลาสที่เข้าใจประเภทข้อมูลแม่นยำยิ่งขึ้นได้แก่ :
ในบริบทของคำถามนี้dtypeเป็นของทั้ง pands และ numpy และโดยเฉพาะอย่างยิ่งdtype('O')เราคาดหวังสตริง
นี่คือรหัสสำหรับการทดสอบพร้อมคำอธิบาย: หากเรามีชุดข้อมูลเป็นพจนานุกรม
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)บรรทัดสุดท้ายจะตรวจสอบ dataframe และบันทึกผลลัพธ์:
   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ทุกชนิดที่แตกต่างกัน dtypes
df.iloc[1,:] = np.nan
df.iloc[2,:] = Noneแต่ถ้าเราพยายามตั้งค่าnp.nanหรือNoneสิ่งนี้จะไม่ส่งผลต่อ dtype คอลัมน์เดิม ผลลัพธ์จะเป็นดังนี้:
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ดังนั้นnp.nanหรือNoneจะไม่เปลี่ยนคอลัมน์dtypeเว้นแต่ว่าเราตั้งแถวคอลัมน์ทั้งหมดไปหรือnp.nan Noneในกรณีนั้นคอลัมน์จะกลายเป็นfloat64หรือobjectตามลำดับ
คุณอาจลองตั้งค่าแถวเดียว:
df.iloc[3,:] = 0 # will convert datetime to object only
df.iloc[4,:] = '' # will convert all columns to objectdtypeและเพื่อให้ทราบที่นี่ถ้าเราตั้งสตริงภายในคอลัมน์สตริงไม่ใช่มันจะกลายเป็นสตริงหรือวัตถุ
หมายความว่า "วัตถุ python" กล่าวคือไม่ใช่ประเภทสเกลาร์ builtin ที่สนับสนุนโดย numpy
np.array([object()]).dtype
=> dtype('O')'O' ย่อมาจากวัตถุ
#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บรรทัดแรกส่งกลับ: dtype('O')
บรรทัดที่มีคำสั่งพิมพ์จะส่งกลับสิ่งต่อไปนี้: object
pandasใช้objectdtype ได้อย่างอิสระเมื่อคอลัมน์มีค่าผสม (สตริงตัวเลขนาโน)