Python Pandas - ข้อมูลตามหมวดหมู่

บ่อยครั้งในข้อมูลแบบเรียลไทม์จะรวมคอลัมน์ข้อความซึ่งซ้ำ ๆ กัน คุณลักษณะต่างๆเช่นเพศประเทศและรหัสมักจะซ้ำซากเสมอ นี่คือตัวอย่างสำหรับข้อมูลเชิงหมวดหมู่

ตัวแปรตามหมวดหมู่สามารถรับค่าที่เป็นไปได้ในจำนวน จำกัด และโดยปกติ นอกเหนือจากความยาวคงที่แล้วข้อมูลเชิงหมวดหมู่อาจมีลำดับ แต่ไม่สามารถดำเนินการเชิงตัวเลขได้ หมวดหมู่เป็นชนิดข้อมูลแพนด้า

ประเภทข้อมูลที่เป็นหมวดหมู่มีประโยชน์ในกรณีต่อไปนี้ -

  • ตัวแปรสตริงประกอบด้วยค่าที่แตกต่างกันเพียงไม่กี่ค่า การแปลงตัวแปรสตริงดังกล่าวเป็นตัวแปรจัดหมวดหมู่จะช่วยประหยัดหน่วยความจำบางส่วน

  • ลำดับศัพท์ของตัวแปรไม่เหมือนกับลำดับตรรกะ (“ หนึ่ง”,“ สอง”,“ สาม”) โดยการแปลงเป็นหมวดหมู่และระบุลำดับในหมวดหมู่การเรียงลำดับและต่ำสุด / สูงสุดจะใช้ลำดับตรรกะแทนลำดับศัพท์

  • เพื่อเป็นสัญญาณไปยังไลบรารี python อื่น ๆ ว่าคอลัมน์นี้ควรได้รับการปฏิบัติเป็นตัวแปรจัดหมวดหมู่ (เช่นใช้วิธีการทางสถิติที่เหมาะสมหรือประเภทของพล็อต

การสร้างวัตถุ

ออบเจ็กต์จัดหมวดหมู่สามารถสร้างได้หลายวิธี วิธีต่างๆได้อธิบายไว้ด้านล่าง -

ประเภท

โดยระบุ dtype เป็น "category" ในการสร้างวัตถุแพนด้า

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
print s

มัน output มีดังนี้ -

0  a
1  b
2  c
3  a
dtype: category
Categories (3, object): [a, b, c]

จำนวนองค์ประกอบที่ส่งไปยังออบเจ็กต์ซีรีส์คือสี่ แต่หมวดหมู่มีเพียงสามเท่านั้น สังเกตสิ่งเดียวกันในหมวดเอาต์พุต

pd. ประเภท

การใช้ตัวสร้างแบ่งประเภทของแพนด้ามาตรฐานเราสามารถสร้างวัตถุหมวดหมู่ได้

pandas.Categorical(values, categories, ordered)

ลองดูตัวอย่าง -

import pandas as pd

cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c'])
print cat

มัน output มีดังนี้ -

[a, b, c, a, b, c]
Categories (3, object): [a, b, c]

มีอีกตัวอย่างหนึ่ง -

import pandas as pd

cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'])
print cat

มัน output มีดังนี้ -

[a, b, c, a, b, c, NaN]
Categories (3, object): [c, b, a]

ที่นี่อาร์กิวเมนต์ที่สองหมายถึงหมวดหมู่ ดังนั้นค่าใด ๆ ที่ไม่มีอยู่ในหมวดหมู่จะถือว่าเป็นNaN.

ตอนนี้ดูตัวอย่างต่อไปนี้ -

import pandas as pd

cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'],ordered=True)
print cat

มัน output มีดังนี้ -

[a, b, c, a, b, c, NaN]
Categories (3, object): [c < b < a]

ตามเหตุผลคำสั่งหมายความว่า a มากกว่า b และ b มากกว่า c.

คำอธิบาย

ใช้ .describe() คำสั่งเกี่ยวกับข้อมูลหมวดหมู่เราได้ผลลัพธ์ที่คล้ายกันกับไฟล์ Series หรือ DataFrame ของ type สตริง

import pandas as pd
import numpy as np

cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
df = pd.DataFrame({"cat":cat, "s":["a", "c", "c", np.nan]})

print df.describe()
print df["cat"].describe()

มัน output มีดังนี้ -

cat s
count    3 3
unique   2 2
top      c c
freq     2 2
count     3
unique    2
top       c
freq      2
Name: cat, dtype: object

รับคุณสมบัติของหมวดหมู่

obj.cat.categories คำสั่งใช้เพื่อรับไฟล์ categories of the object.

import pandas as pd
import numpy as np

s = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print s.categories

มัน output มีดังนี้ -

Index([u'b', u'a', u'c'], dtype='object')

obj.ordered คำสั่งใช้เพื่อรับคำสั่งของวัตถุ

import pandas as pd
import numpy as np

cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print cat.ordered

มัน output มีดังนี้ -

False

ฟังก์ชันกลับมา false เนื่องจากเราไม่ได้ระบุคำสั่งซื้อใด ๆ

การเปลี่ยนชื่อหมวดหมู่

การเปลี่ยนชื่อหมวดหมู่ทำได้โดยการกำหนดค่าใหม่ให้กับไฟล์ series.cat.categoriesseries.cat.categories คุณสมบัติ

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
s.cat.categories = ["Group %s" % g for g in s.cat.categories]
print s.cat.categories

มัน output มีดังนี้ -

Index([u'Group a', u'Group b', u'Group c'], dtype='object')

หมวดหมู่เริ่มต้น [a,b,c] ได้รับการอัปเดตโดยไฟล์ s.cat.categories คุณสมบัติของวัตถุ

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

การใช้วิธีการจัดหมวดหมู่ () หมวดหมู่ใหม่สามารถต่อท้ายได้

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
s = s.cat.add_categories([4])
print s.cat.categories

มัน output มีดังนี้ -

Index([u'a', u'b', u'c', 4], dtype='object')

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

ใช้ Categorical.remove_categories() วิธีการสามารถลบหมวดหมู่ที่ไม่ต้องการออกได้

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
print ("Original object:")
print s

print ("After removal:")
print s.cat.remove_categories("a")

มัน output มีดังนี้ -

Original object:
0  a
1  b
2  c
3  a
dtype: category
Categories (3, object): [a, b, c]

After removal:
0  NaN
1  b
2  c
3  NaN
dtype: category
Categories (2, object): [b, c]

การเปรียบเทียบข้อมูลตามหมวดหมู่

การเปรียบเทียบข้อมูลเชิงหมวดหมู่กับวัตถุอื่นเป็นไปได้ในสามกรณี -

  • การเปรียบเทียบความเท่าเทียมกัน (== และ! =) กับวัตถุที่มีลักษณะคล้ายรายการ (list, Series, array, ... ) ที่มีความยาวเท่ากับข้อมูลหมวดหมู่

  • การเปรียบเทียบทั้งหมด (==,! =,>,> =, <และ <=) ของข้อมูลหมวดหมู่กับซีรี่ส์หมวดหมู่อื่นเมื่อเรียงลำดับ == True และหมวดหมู่จะเหมือนกัน

  • การเปรียบเทียบข้อมูลหมวดหมู่ทั้งหมดกับสเกลาร์

ดูตัวอย่างต่อไปนี้ -

import pandas as pd

cat = pd.Series([1,2,3]).astype("category", categories=[1,2,3], ordered=True)
cat1 = pd.Series([2,2,2]).astype("category", categories=[1,2,3], ordered=True)

print cat>cat1

มัน output มีดังนี้ -

0  False
1  False
2  True
dtype: bool