ฉันมีดาต้าเฟรมเป็นหมีแพนด้าและฉันกำลังพยายามหาว่าค่าของมันคืออะไร ฉันไม่แน่ใจว่าประเภทของคอลัมน์'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)
อีกคำตอบที่จะช่วยถ้าจำเป็นต้องตรวจสอบtype
s
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 object
dtype
และเพื่อให้ทราบที่นี่ถ้าเราตั้งสตริงภายในคอลัมน์สตริงไม่ใช่มันจะกลายเป็นสตริงหรือวัตถุ
หมายความว่า "วัตถุ 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
ใช้object
dtype ได้อย่างอิสระเมื่อคอลัมน์มีค่าผสม (สตริงตัวเลขนาโน)