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