การตั้งค่าตัวแปรประเภท category

การทำงานกับข้อมูลเชิงกลุ่มใน Python

Kasey Jones

Research Data Scientist

ชุดข้อมูลใหม่: สุนัขที่รอการรับเลี้ยง

dogs.info()  
RangeIndex: 2937 entries, 0 to 2936, Data columns (total 19 columns):
 #   Column             Non-Null Count  Dtype  
 --  ------             --------------  -----  
 0   ID                 2937 non-null   int64  
 ...
 8   color              2937 non-null   object 
 9   coat               2937 non-null   object 
 ...
 17  get_along_cats     431 non-null    object 
 18  keep_in            1916 non-null   object 
dtypes: float64(1), int64(1), object(17)
memory usage: 436.1+ KB
...
1 https://www.kaggle.com/jmolitoris/adoptable-dogs
การทำงานกับข้อมูลเชิงกลุ่มใน Python

ประเภทขนของสุนัข

dogs["coat"] = dogs["coat"].astype("category")
dogs["coat"].value_counts(dropna=False)
short         1972
medium         565
wirehaired     220
long           180
Name: coat, dtype: int64
การทำงานกับข้อมูลเชิงกลุ่มใน Python

ออบเจกต์ accessor ชื่อ .cat

Series.cat.method_name

พารามิเตอร์ที่ใช้บ่อย:

  • new_categories: รายการของหมวดหมู่
  • inplace: Boolean — อัปเดตโดยเขียนทับ Series เดิมหรือไม่
  • ordered: Boolean — ถือว่าหมวดหมู่มีลำดับหรือไม่
การทำงานกับข้อมูลเชิงกลุ่มใน Python

การกำหนดหมวดหมู่ใน Series

กำหนดหมวดหมู่:

dogs["coat"] = dogs["coat"].cat.set_categories(
  new_categories=["short", "medium", "long"]
)

ตรวจสอบจำนวนค่า:

dogs["coat"].value_counts(dropna=False)
short     1972
medium     565
NaN        220
long       180
การทำงานกับข้อมูลเชิงกลุ่มใน Python

การกำหนดลำดับ

dogs["coat"] = dogs["coat"].cat.set_categories(
  new_categories=["short", "medium", "long"],
  ordered=True
)
dogs["coat"].head(3)
0     short
1     short
2     short
Name: coat, dtype: category
Categories (3, object): ['short' < 'medium' < 'long']
การทำงานกับข้อมูลเชิงกลุ่มใน Python

หมวดหมู่ที่ขาดหายไป

dogs["likes_people"].value_counts(dropna=False)
yes    1991
NaN     938
no        8

NaN อาจหมายความว่า:

  1. ไม่ทราบจริงๆ (ยังไม่ได้ตรวจสอบ)
  2. ไม่แน่ใจ (สุนัขชอบบางคน)
การทำงานกับข้อมูลเชิงกลุ่มใน Python

การเพิ่มหมวดหมู่

เพิ่มหมวดหมู่

dogs["likes_people"] = dogs["likes_people"].astype("category")
dogs["likes_people"] = dogs["likes_people"].cat.add_categories(
  new_categories=["did not check", "could not tell"]
)

ตรวจสอบหมวดหมู่:

dogs["likes_people"].cat.categories
Index(['no', 'yes', 'did not check', 'could not tell'], dtype='object')
การทำงานกับข้อมูลเชิงกลุ่มใน Python

หมวดหมู่ใหม่

dogs["likes_people"].value_counts(dropna=False)
yes               1991
NaN                938
no                   8
could not tell       0
did not check        0
การทำงานกับข้อมูลเชิงกลุ่มใน Python

การลบหมวดหมู่

dogs["coat"] = dogs["coat"].astype("category")
dogs["coat"] = dogs["coat"].cat.remove_categories(removals=["wirehaired"])

ตรวจสอบหมวดหมู่:

dogs["coat"].cat.categories
Index(['long', 'medium', 'short'], dtype='object')
การทำงานกับข้อมูลเชิงกลุ่มใน Python

สรุปเมธอด

  • การกำหนด: cat.set_categories()
    • ใช้กำหนดลำดับของหมวดหมู่ได้
    • ค่าที่ไม่ได้ระบุในเมธอดนี้จะถูกตัดออก
  • การเพิ่ม: cat.add_categories()
    • ไม่เปลี่ยนแปลงค่าข้อมูลใน DataFrame
    • หมวดหมู่ที่ไม่ได้ระบุจะยังคงอยู่เหมือนเดิม
  • การลบ: cat.remove_categories()
    • ค่าที่ตรงกับหมวดหมู่ที่ระบุจะถูกเปลี่ยนเป็น NaN
การทำงานกับข้อมูลเชิงกลุ่มใน Python

มาฝึกอัปเดตหมวดหมู่กัน

การทำงานกับข้อมูลเชิงกลุ่มใน Python

Preparing Video For Download...