Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีเลือกหลายคอลัมน์ DataFrame โดยใช้ regexp และ datatypes


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 แทน