DataFrame อาจเปรียบเทียบกับชุดข้อมูลที่จัดเก็บไว้ในสเปรดชีตหรือฐานข้อมูลที่มีแถวและคอลัมน์ DataFrame เป็นออบเจกต์ 2 มิติ
ตกลง สับสนกับคำศัพท์ 1 มิติและ 2 มิติ ใช่ไหม
ความแตกต่างที่สำคัญระหว่าง 1D (ซีรี่ส์) และ 2D (DataFrame) คือจำนวนจุดของข้อมูลที่คุณต้องระบุเพื่อให้มาถึงจุดข้อมูลเดียว หากคุณใช้ตัวอย่างชุดข้อมูลและต้องการดึงค่าออกมา คุณจะต้องใช้จุดอ้างอิงเพียงจุดเดียว นั่นคือ ดัชนีแถว
ในการเปรียบเทียบกับตาราง (DataFrame) จุดอ้างอิงหนึ่งจุดไม่เพียงพอที่จะไปยังจุดข้อมูล คุณต้องมีจุดตัดของค่าแถวและค่าคอลัมน์
ตัวอย่างด้านล่างแสดงวิธีสร้าง Pandas DataFrame จากไฟล์ csv
.read_csv() วิธีการโดยค่าเริ่มต้นจะสร้าง DataFrame คุณดาวน์โหลดชุดข้อมูลภาพยนตร์ได้จาก kaggle.com โดยค้นหาภาพยนตร์
"""สคริปต์ :สร้าง Pandas DataFrame จากไฟล์ csv"""นำเข้าแพนด้าเป็น pdmovies_dataset pd read_csv "https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv")# 1 พิมพ์ประเภทของวัตถุ (movies_dataset)# 2 พิมพ์ 5 อันดับแรกในรูปแบบตารางmovies_dataset head(5)
| งบประมาณ | id | ต้นฉบับ_ภาษา | original_title | ความนิยม | release_date | รายได้ | รันไทม์ | สถานะ | title | vote_average | vote_count |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 237000000 | 19995 | th | อวตาร | 150.437577 | 10/12/2552 | 2787965087 | 162.0 | วางจำหน่ายแล้ว | อวตาร | 7.2 | 11800 |
1 | 300000000 | 285 | th | Pirates of the Caribbean:At World's End | 139.082615 | 19/05/2550 | 961000000 | 169.0 | วางจำหน่ายแล้ว | Pirates of the Caribbean:At World's End | 6.9 | 4500 |
2 | 245000000 | 206647 | th | Spectre | 107.376788 | 26/10/2558 | 880674609 | 148.0 | วางจำหน่ายแล้ว | Spectre | 6.3 | 4466 |
3 | 250000000 | 49026 | th | อัศวินรัตติกาลผงาด | 112.312950 | 16/07/2012 | 1084939099 | 165.0 | วางจำหน่ายแล้ว | อัศวินรัตติกาลผงาด | 7.6 | 9106 |
4 | 260000000 | 49529 | th | จอห์น คาร์เตอร์ | 43.926995 | 7/03/2012 | 284139100 | 132.0 | วางจำหน่ายแล้ว | จอห์น คาร์เตอร์ | 6.1 | 2124 |
2.การเลือกคอลัมน์ DataFrame คอลัมน์เดียว การส่งชื่อคอลัมน์เป็นสตริงหรือรายการไปยังตัวดำเนินการดัชนีจะคืนค่าคอลัมน์เป็น Series หรือ DataFrame
หากเราส่งผ่านสตริงที่มีชื่อคอลัมน์ คุณจะได้รับ Series เป็นเอาต์พุต อย่างไรก็ตาม การส่งรายการที่มีชื่อคอลัมน์เพียงชื่อเดียวจะส่งกลับ DataFrame เราจะเห็นสิ่งนี้พร้อมตัวอย่าง
# เลือกข้อมูลเป็นซีรีส์ movies_dataset["title"]
0 Avatar1 Pirates of the Caribbean:At World's End2 Spectre3 The Dark Knight Rises4 John Carter...4798 El Mariachi4799 Newlyweds4800 Signed, Sealed, Delivered4801 Shanghai Calling4802 My Date with DrewName:title, Length:4803, dtype:object ก่อน>
# เลือกข้อมูลเป็น DataFrame movies_dataset[["title"]]
| title |
---|---|
0 | อวตาร |
1 | Pirates of the Caribbean:At World's End |
2 | Spectre |
3 | อัศวินรัตติกาลผงาด |
4 | จอห์น คาร์เตอร์ |
... | ... |
4798 | El Mariachi |
4799 | คู่บ่าวสาว |
4800 | ลงนาม ปิดผนึก ส่งแล้ว |
4801 | เซี่ยงไฮ้โทร |
4802 | เดทของฉันกับดรูว์ |
3.เลือกหลายคอลัมน์ DataFrame
# คอลัมน์ DataFrame หลายคอลัมน์ movies_dataset[["title""runtime","vote_average","vote_count"]]
| title | รันไทม์ | vote_average | vote_count |
---|---|---|---|---|
0 | อวตาร | 162.0 | 7.2 | 11800 |
1 | Pirates of the Caribbean:At World's End | 169.0 | 6.9 | 4500 |
2 | Spectre | 148.0 | 6.3 | 4466 |
3 | อัศวินรัตติกาลผงาด | 165.0 | 7.6 | 9106 |
4 | จอห์น คาร์เตอร์ | 132.0 | 6.1 | 2124 |
... | ... | ... | ... | ... |
4798 | El Mariachi | 81.0 | 6.6 | 238 |
4799 | คู่บ่าวสาว | 85.0 | 5.9 | 5 |
4800 | ลงนาม ปิดผนึก ส่งแล้ว | 120.0 | 7.0 | 6 |
4801 | เซี่ยงไฮ้โทร | 98.0 | 5.7 | 7 |
4802 | เดทของฉันกับดรูว์ | 90.0 | 6.3 | 16 |
เพื่อหลีกเลี่ยงปัญหาการอ่านโค้ดได้ ฉันแนะนำให้กำหนดตัวแปรสำหรับเก็บชื่อคอลัมน์เป็นรายการและใช้ชื่อคอลัมน์แทนการระบุชื่อคอลัมน์หลายรายการภายในโค้ด
คอลัมน์=["title","runtime","vote_average","vote_count"]movies_dataset[columns]
| title | รันไทม์ | vote_average | vote_count |
---|---|---|---|---|
0 | อวตาร | 162.0 | 7.2 | 11800 |
1 | Pirates of the Caribbean:At World's End | 169.0 | 6.9 | 4500 |
2 | Spectre | 148.0 | 6.3 | 4466 |
3 | อัศวินรัตติกาลผงาด | 165.0 | 7.6 | 9106 |
4 | จอห์น คาร์เตอร์ | 132.0 | 6.1 | 2124 |
... | ... | ... | ... | ... |
4798 | El Mariachi | 81.0 | 6.6 | 238 |
4799 | คู่บ่าวสาว | 85.0 | 5.9 | 5 |
4800 | ลงนาม ปิดผนึก ส่งแล้ว | 120.0 | 7.0 | 6 |
4801 | เซี่ยงไฮ้โทร | 98.0 | 5.7 | 7 |
4802 | เดทของฉันกับดรูว์ | 90.0 | 6.3 | 16 |
4.DataFrame คอลัมน์ตามชื่อคอลัมน์
.filter() วิธีการ
วิธีนี้ค่อนข้างสะดวกในการค้นหาและเลือกคอลัมน์โดยใช้สตริง วิธีนี้ใช้งานได้เกือบเหมือนกับพารามิเตอร์ %% ที่คล้ายกันใน SQL โปรดจำไว้ว่า .filter() วิธีการเลือกคอลัมน์โดยการตรวจสอบเฉพาะชื่อคอลัมน์เท่านั้น ไม่ใช่ค่าข้อมูลจริง
.filter() วิธีการรองรับพารามิเตอร์สามตัวที่สามารถใช้สำหรับการดำเนินการเลือกได้
.ชอบ
.regex
.items
พารามิเตอร์like ใช้สตริงและพยายามค้นหาชื่อคอลัมน์ที่มีสตริงนี้ในชื่อคอลัมน์
# เลือกคอลัมน์ที่มีชื่อคอลัมน์เช่น "title" movies_dataset.filter(like="title").head(5)
| original_title | title |
---|---|---|
0 | อวตาร | อวตาร |
1 | Pirates of the Caribbean:At World's End | Pirates of the Caribbean:At World's End |
2 | Spectre | Spectre |
3 | อัศวินรัตติกาลผงาด | อัศวินรัตติกาลผงาด |
4 | จอห์น คาร์เตอร์ | จอห์น คาร์เตอร์ |
.regex – วิธีที่ยืดหยุ่นมากขึ้นในการเลือกชื่อคอลัมน์โดยใช้นิพจน์ทั่วไป
# เลือกคอลัมน์ที่ลงท้ายด้วย "t"movies_dataset.filter(regex=t).head()
| งบประมาณ | vote_count |
---|---|---|
0 | 237000000 | 11800 |
1 | 300000000 | 4500 |
2 | 245000000 | 4466 |
3 | 250000000 | 9106 |
4 | 260000000 | 2124 |
.items – ซ้ำกันของการส่งชื่อคอลัมน์เป็นสตริงหรือรายการไปยังตัวดำเนินการดัชนี ยกเว้น KeyError จะไม่ถูกยกขึ้น
คอลัมน์ DataFrame ตามประเภทข้อมูล
เมธอด .select_dtypes ใช้ได้กับประเภทข้อมูลคอลัมน์ หากคุณสนใจที่จะกรองและใช้ข้อมูลบางประเภทเท่านั้น
อีกครั้ง วิธี .select_dtypes ยอมรับข้อมูลหลายประเภท (ตามรายการ) หรือประเภทข้อมูลเดียว (เป็นสตริง) ในพารามิเตอร์รวมหรือแยกออก และส่งกลับ DataFrame ที่มีคอลัมน์ประเภทข้อมูลที่กำหนดเท่านั้น
พารามิเตอร์ .include รวมคอลัมน์ที่มีประเภทข้อมูลที่ระบุ และ .exclude จะละเว้นคอลัมน์ที่มีประเภทข้อมูลที่ระบุ
มาดูประเภทข้อมูลและจำนวนคอลัมน์ที่มีประเภทข้อมูลเหล่านั้นกันก่อน
movies_dataset=pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv"movies_dataset.dtypes.value_counts()
วัตถุ 5int64 4float64 3dtype:int64
a) การกรองประเภทข้อมูลจำนวนเต็มจาก DataFrames ของแพนด้า
movies_dataset select_dtypes(include="int")head(3)
2 |
---|
1 |
0 |
|
ข) เลือกประเภทข้อมูลจำนวนเต็มและทศนิยมจาก DataFrames แพนด้า
คุณสามารถระบุประเภทข้อมูลได้หลายประเภทตามรายการที่แสดงด้านล่าง
movies_dataset select_dtypes(include="int64","float"]).head(3)
| งบประมาณ | id | ความนิยม | รายได้ | รันไทม์ | vote_average | vote_count |
---|---|---|---|---|---|---|---|
0 | 237000000 | 19995 | 150.437577 | 2787965087 | 162.0 | 7.2 | 11800 |
1 | 300000000 | 285 | 139.082615 | 961000000 | 169.0 | 6.9 | 4500 |
2 | 245000000 | 206647 | 107.376788 | 880674609 | 148.0 | 6.3 | 4466 |
ค) ถ้าคุณต้องการประเภทข้อมูลตัวเลขทั้งหมด ก็ระบุตัวเลข
movies_dataset select_dtypes(include=["number"]).head(3)
| งบประมาณ | id | ความนิยม | รายได้ | รันไทม์ | vote_average | vote_count |
---|---|---|---|---|---|---|---|
0 | 237000000 | 19995 | 150.437577 | 2787965087 | 162.0 | 7.2 | 11800 |
1 | 300000000 | 285 | 139.082615 | 961000000 | 169.0 | 6.9 | 4500 |
2 | 245000000 | 206647 | 107.376788 | 880674609 | 148.0 | 6.3 | 4466 |
ง) ยกเว้นข้อมูลบางประเภทจาก DataFrames ของแพนด้า
movies_dataset select_dtypes(exclude=["object"]).head(3)
| งบประมาณ | id | ความนิยม | รายได้ | รันไทม์ | vote_average | vote_count |
---|---|---|---|---|---|---|---|
0 | 237000000 | 19995 | 150.437577 | 2787965087 | 162.0 | 7.2 | 11800 |
1 | 300000000 | 285 | 139.082615 | 961000000 | 169.0 | 6.9 | 4500 |
2 | 245000000 | 206647 | 107.376788 | 880674609 | 148.0 | 6.3 | 4466 |
หมายเหตุ :- ไม่มีประเภทข้อมูลสตริงที่ต้องจัดการ pandas แปลงเป็น Object ดังนั้นหากคุณพบข้อยกเว้น “TypeError:data type “string” ไม่เข้าใจ” ให้แทนที่สตริงด้วย Object แทน