เมื่อพยายามทำความเข้าใจ DataFrame ขนาดใหญ่ใน Pandas คุณอาจต้องแบ่งย่อยตามคอลัมน์และแถว ในบทช่วยสอนนี้ เราจะแสดงกรณีการใช้งานที่แพร่หลายที่สุดของการแบ่งพาร์ติชัน DataFrame ของคุณ
เราจะเริ่มต้นด้วยการตั้งค่าตัวอย่าง DataFrame ซึ่งเราจะทำโดยเรียกใช้โค้ด Python ต่อไปนี้ในสภาพแวดล้อมที่เราโปรดปราน (เพื่อความง่าย ฉันใช้ Anaconda และ Jupyter Lab)
import pandas as pd # import the pandas library
languages = ({"language": [ "Python", "C-Sharp", "Javascript","PHP"] ,
"avg_difficulty_level": [3, 2, 2, 1],
"avg_salary": [120, 100, 120, 80],
"applications": [10,15,14,20]})
# Now let's convert our dict to a DataFrame
languages = pd.DataFrame.from_dict(languages)
ตอนนี้ ให้เราดูใน Dataframe แถวแรกโดยใช้เมธอด head()
languages.head()
อย่างที่คุณเห็น นี่เป็น DataFrame ที่ค่อนข้างเรียบง่ายที่เราจะใช้เป็นตัวอย่างในโพสต์นี้:
| |
ภาษา |
avg_difficulty_level |
avg_salary |
แอปพลิเคชั่น |
| 0 |
Python |
3 |
120 |
10 |
| 1 |
ซี-ชาร์ป |
2 |
100 |
15 |
| 2 |
Javascript |
2 |
120 |
14 |
| 3 |
PHP |
1 |
80 |
20 |
การกรองคอลัมน์เดียว
เราจะเริ่มด้วยกรณีที่ง่ายที่สุด ซึ่งก็คือการย่อยหนึ่งคอลัมน์ออกจากชุดข้อมูลของเรา การรันคำสั่งต่อไปนี้จะสร้างอ็อบเจกต์ Series:
ตามชื่อ/ป้าย
languages["language"]
เอาต์พุตเป็น Series:
0 Python
1 ซี-ชาร์ป
2 Javascript
3 PHP
ชื่อ: ภาษา dtype: object
type(languages["language"])
pandas.core.series.Series
By ดัชนี
คำสั่งต่อไปนี้จะส่งคืน Series ที่มีคอลัมน์แรก
languages.iloc[:,0]
การเลือกหลายคอลัมน์
โดยชื่อ
เมื่อส่งรายการคอลัมน์ Pandas จะส่งคืน DataFrame ที่มีข้อมูลบางส่วน
languages[["language", "applications"]]
| |
ภาษา |
แอปพลิเคชั่น |
| 0 |
Python |
10 |
| 1 |
ซี-ชาร์ป |
15 |
| 2 |
Javascript |
14 |
| 3 |
PHP |
20 |
ตามป้ายกำกับ (พร้อม loc)
df.loc[:,["language","applications"]]
ผลลัพธ์จะคล้ายกัน
By ดัชนี
ทีนี้ลองดึงข้อมูลหลายคอลัมน์โดยใช้ดัชนี:
languages.iloc[: ,[0,3]]
| |
ภาษา |
แอปพลิเคชั่น |
| 0 |
Python |
10 |
| 1 |
ซี-ชาร์ป |
15 |
| 2 |
Javascript |
14 |
| 3 |
PHP |
20 |
ตามเงื่อนไข
ในกรณีนี้ เราจะแสดงเฉพาะคอลัมน์ที่ชื่อตรงกับนิพจน์เฉพาะ เราจะใช้วิธีการ กรองที่ค่อนข้างสะดวก:
languages.filter(axis = 1, like="avg")
หมายเหตุ:
- เรายังสามารถกรองตามนิพจน์ทั่วไปเฉพาะ (regex)
- เราสามารถใช้พารามิเตอร์ axis=0 เพื่อกรองตามค่าแถวเฉพาะ
กรองแถวเฉพาะตามเงื่อนไข
นี่เป็นวิธีที่ค่อนข้างตรงไปตรงมาในการย่อย DataFrame ตามค่าแถว:
languages[(languages["applications"] > 15)]
เรามีผลลัพธ์เดียวเท่านั้น:
languages[(languages["applications"] > 15)]
| |
ภาษา |
avg_difficulty_level |
avg_salary |
แอปพลิเคชั่น |
| 3 |
PHP |
1 |
80 |
20 |