บทความนี้เผยแพร่โดยเป็นส่วนหนึ่งของไฟล์ Blogathon วิทยาศาสตร์ข้อมูล
บทนำ
มีความเป็นไปได้ที่ดีที่คุณสามารถทำได้!
สำหรับนักวิทยาศาสตร์ข้อมูลที่ใช้ Python เป็นภาษาโปรแกรมหลัก แพ็คเกจ Pandas เป็นเครื่องมือวิเคราะห์ข้อมูลที่ต้องมี แพ็คเกจ Pandas มีทุกสิ่งที่นักวิทยาศาสตร์ข้อมูลต้องการ และทุกหลักสูตรสอนเราถึงวิธีใช้งานในตอนแรก มันใหญ่มาก ทรงพลัง และดำเนินการจัดการตารางแทบทุกอย่างที่คุณสามารถจินตนาการได้ อย่างไรก็ตาม ความกว้างนี้อาจเป็นข้อเสียในบางครั้ง
มันมีคุณสมบัติที่สวยงามมากมายที่แก้ปัญหาเคสขอบหายาก สถานการณ์ที่แตกต่างกัน
ข้อเสียที่สำคัญอย่างหนึ่งของแพนด้าคือมันมีปัญหากับชุดข้อมูลขนาดใหญ่ เนื่องจากแพนด้าเก็บโครงสร้างข้อมูลไว้ใน RAM ซึ่งอาจไม่เพียงพอเมื่อขนาดข้อมูลเติบโตขึ้น ใช้ PySpark หรือ Dask สำหรับสิ่งนี้
แม้ว่าแพ็คเกจ Pandas จะใช้กันอย่างแพร่หลาย แต่ก็ยังมีฟังก์ชั่นมากมายที่ผู้คนอาจมองข้าม ไม่ว่าจะเป็นเพราะว่าใช้น้อยหรือเพราะพวกเขาไม่รู้ถึงการมีอยู่ของมัน โพสต์นี้มีจุดมุ่งหมายเพื่อแนะนำให้คุณรู้จักกับคุณลักษณะเหล่านั้นอีกครั้ง และแสดงให้เห็นว่า Pandas มีความสามารถมากกว่าที่คุณเคยทราบมาก่อน
ท่อ
ในการดำเนินการล้างข้อมูลอย่างกระชับและกะทัดรัดในแพนด้า เราสามารถใช้ฟังก์ชันไปป์ ซึ่งช่วยให้คุณรวมหลายฟังก์ชันในการทำงานครั้งเดียวได้
ตัวอย่างเช่น หากคุณต้องการใช้ฟังก์ชันต่างๆ เช่น drop_duplicates, encode_categoricals, remove_outliers ที่ยอมรับอาร์กิวเมนต์
df_cleaned = (diamonds.pipe(drop_duplicates) pipe(remove_outliers, ['price', 'carat', 'deep']) ไปป์ (encode_categoricals, ['cut', 'color', 'clarity']) )
แยกตัวประกอบ
ฟังก์ชันนี้เป็นทางเลือกแทน Sklearns Label Encoder
# คิดถึง [0] ที่ปลายเพชร["cut_enc"] = pd.factorize(diamonds["cut"])[0] >>> เพชร["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 ชื่อ: cut_enc, dtype: int64
แยกตัวประกอบผลลัพธ์เป็นทูเพิลของค่า: ค่าที่เข้ารหัสและรายการหมวดหมู่ที่ไม่ซ้ำ
ค่าเฉพาะ = pd.factorize(เพชร["cut"], sort=True) >>> ค่า[:10] array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> ไม่ซ้ำใคร ['Ideal', 'Premium', 'Very Good', 'Good', 'Fair']
ระเบิด
ภาพถ่ายโดย เอเดวา ฟอสเตอร์ on Unsplash
Explode เป็นฟังก์ชันที่มีชื่อที่น่าสนใจ เริ่มจากตัวอย่างและคำอธิบาย:
df = pd.Series([1, 6, 7, [46, 56, 49, 45, [15, 10, 12]]).to_frame("dirty") >>> df
คอลัมน์คุณลักษณะมีสองแถวที่แสดงด้วยรายการ ข้อมูลประเภทนี้มีอยู่ในแบบสำรวจซึ่งคำถามสองสามข้อยอมรับหลายตัวเลือก
>>> df.explode("สกปรก", forget_index=จริง)
ฟังก์ชันนี้ใช้เซลล์ที่มีอาร์เรย์ของค่าและกระจายออกเป็นหลายแถว เพื่อรักษาลำดับของดัชนีตัวเลข ให้ใช้ dissolve_index เป็น True
ระหว่าง
สำหรับคุณสมบัติตัวเลขการจัดทำดัชนีบูลีนภายในช่วง ฟังก์ชันที่มีประโยชน์มีดังนี้:
# รับเพชรที่มีราคาตั้งแต่ 3500 ถึง 3700 ดอลลาร์ diamonds[diamonds["price"].between(3500, 3700, inclusive="neither")].sample(5)
T
DataFrame มีแอตทริบิวต์ T อย่างง่ายที่เรียกว่าทรานสโพส เราอาจใช้ไม่บ่อย วิธีอธิบายมีประโยชน์ขณะดูดาต้าเฟรม
>>> boston.describe().T.head(10)
ตัวเลือกแพนด้า
คุณสามารถใช้การตั้งค่าส่วนกลางของแพนด้าที่ช่วยปรับแต่งและเปลี่ยนพฤติกรรมเริ่มต้นได้
>>> dir (pd.options) ['คำนวณ', 'แสดง', 'io', 'โหมด', 'พล็อต']
ประกอบด้วย 5 โมดูล มาดูตัวเลือกที่ใช้ได้ใต้จอแสดงผลกัน มีตัวเลือกมากมาย แต่ส่วนใหญ่ฉันใช้ max_columns
>>> dir(pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'precision', 'show_dimensions', 'unicode' , 'ความกว้าง']
คนส่วนใหญ่ใช้ max_columns และความแม่นยำ
# ลบขีด จำกัด เพื่อแสดงจำนวนของ cols pd.options.display.max_columns = ไม่มี # แสดงเฉพาะ 5 ตัวเลขหลัง pd.options.display.precision ทศนิยม = 5 # กำจัดสัญกรณ์วิทยาศาสตร์
Convert_dtypes
เราทุกคนทราบดีว่าแพนด้ามีนิสัยที่น่ารำคาญในการทำเครื่องหมายบางคอลัมน์เป็นประเภทข้อมูลออบเจ็กต์ แทนที่จะกำหนดประเภทโดยตรง คุณสามารถใช้วิธี convert dtypes ซึ่งจะพยายามอนุมานประเภทข้อมูลที่ดีที่สุด:
ตัวอย่าง = pd.read_csv ("data/station_day.csv",usecols=["StationId", "CO", "O3", "AQI_Bucket"]) >>> sample.dtypes วัตถุ StationId CO float64 O3 float64 AQI_Bucket วัตถุ dtype: วัตถุ >>> sample.convert_dtypes ().dtypes StationId string CO float64 O3 float64 AQI_Bucket string dtype: วัตถุ
Select_dtypes
จากชื่อผมเชื่อว่ามันชัดเจนว่าฟังก์ชั่นทำอะไร คุณสามารถใช้ตัวเลือกรวมและแยกเพื่อระบุคอลัมน์ที่รวมหรือละเว้นประเภทข้อมูลเฉพาะ
เลือกเฉพาะคอลัมน์ตัวเลขที่มี np.number เช่น
# เลือกเฉพาะคอลัมน์ตัวเลข diamonds.select_dtypes(include=np.number).head()
หน้ากาก
ฟังก์ชันนี้ช่วยแทนที่ค่าที่เงื่อนไขแบบกำหนดเองไม่เป็นที่พอใจ
# สร้างข้อมูลตัวอย่าง อายุ = pd.Series ([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("ages") อายุ
หลังจากดำเนินการตามข้างต้นแล้ว
มินและแม็กซ์
แม้ว่าค่าต่ำสุดและค่าสูงสุดจะเป็นที่รู้จักกันดี แต่ก็มีคุณสมบัติที่ดีกว่าสำหรับเคสขอบบางตัว
index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"] ไลบรารี = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) สำหรับ lib ในไลบรารี}, index=index ) >>> df
DataFrame ที่สมมติขึ้นด้านบนแสดงผลลัพธ์ของไลบรารีส่งเสริมการไล่ระดับสีที่แตกต่างกันสี่ชุดในชุดข้อมูลห้าชุด เรากำลังมองหาแพ็คเกจที่ทำงานได้ดีที่สุดในแต่ละชุดข้อมูล นี่คือวิธีการทำให้สำเร็จด้วย max อย่างมีระดับ:
>>> df.max(axis=1) เพชร 99.52684 ไททานิค 99.63650 ไอริส 99.10989 โรคหัวใจ 99.31627 ค่ายืมเริ่มต้น 97.96728 dtype: float64
ใหญ่ที่สุดและเล็กที่สุด
ค่าที่ใหญ่ที่สุดและค่าน้อยที่สุดจะเป็นประโยชน์ในการดูค่า N หรือ ~(บนสุด) ของตัวแปร
diamonds.nlargest(5, "ราคา")
diamonds.nsmallest(5, "ราคา")
Idxmax และ Idxmin
Pandas จะคืนค่าจำนวนที่มากที่สุด/น้อยที่สุดเมื่อคุณโทรหา max หรือ min ในคอลัมน์ อย่างไรก็ตาม มีบางสถานการณ์ที่คุณต้องการตำแหน่งของต่ำสุด/สูงสุด ซึ่งฟังก์ชันเหล่านี้ไม่มีให้
คุณสามารถใช้ idxmax/idxmin แทน:
>>> diamonds.price.idxmax() 27749 >>> diamonds.carat.idxmin() 14
ค่า_นับ
วิธีทั่วไปในการค้นหาเปอร์เซ็นต์ของค่าที่หายไปคือการรวม isnull และ sum และหารด้วยขนาดของอาร์เรย์
แต่ value_counts ที่มีอาร์กิวเมนต์ที่เกี่ยวข้องทำสิ่งเดียวกัน:
ที่อยู่อาศัย = pd.read_csv("train.csv") >>> ที่อยู่อาศัย ["FireplaceQu"].value_counts (dropna=False, normalize=True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Ex 0.01644 Po 0.01370 ชื่อ: FireplaceQu, dtype: float64
คลิป
ฟังก์ชันคลิปช่วยค้นหาค่าผิดปกติที่อยู่นอกช่วงและแทนที่ด้วยฮาร์ดจำกัด
>>> อายุ คลิป(50, 60)
At_time และ Betweeen_time
ฟังก์ชันเหล่านี้มีประโยชน์ในขณะที่ทำงานกับอนุกรมเวลาที่ละเอียดสูง
at_time ช่วยในการรับค่าในวันที่หรือเวลาที่ระบุ
index = pd.date_range("2021-08-01", periods=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >> > df.head()
>>> df.at_time(“15:00”)
between_time ใช้เพื่อดึงแถวภายในช่วงที่กำหนดเอง
จากวันที่และเวลานำเข้า วันที่และเวลา >>> df.between_time("09:45", "12:00")
Bdate_range
ฟังก์ชันนี้ช่วยในการสร้างดัชนีอนุกรมเวลาด้วยความถี่ของวันทำการ โลกการเงินมีความถี่ประเภทนี้ ดังนั้น ฟังก์ชันนี้อาจมีประโยชน์เมื่อทำดัชนีอนุกรมเวลาใหม่ด้วยฟังก์ชันการจัดทำดัชนีใหม่
series = pd.bdate_range("2021-01-01", "2021-01-31") # ระยะเวลาหนึ่งเดือน >>> len(series) 21
ที่และ Iat
อุปกรณ์เชื่อมต่อทั้งสองนี้เร็วกว่า loc และ iloc อย่างมาก อย่างไรก็ตาม พวกเขามีข้อเสียเปรียบ อนุญาตให้คุณเลือกหรือเปลี่ยนค่าได้ครั้งละหนึ่งค่าเท่านั้น:
# [index, label] >>> diamond.at[234, "cut"] 'Ideal' # [index, index] >>> diamonds.iat[1564, 4] 61.2 # แทนที่แถวที่ 16541 ของคอลัมน์ราคา >> > diamond.at[16541, "price"] = 10000
อาร์สซอร์ต
ฟังก์ชันนี้ช่วยในการแยกดัชนีที่จะจัดเรียงอาร์เรย์ของคุณลักษณะต่างๆ
tips.reset_index(inplace=True, drop=True) sort_idx = tips["total_bill"].argsort(kind="mergesort") # ตอนนี้ จัดเรียง `tips' ตามจำนวน tips.iloc[sort_idx].head()
อุปกรณ์เสริมสำหรับแมว
แพนด้าอนุญาตให้มีฟังก์ชันในตัวของหลามในวันที่และสตริงโดยใช้ตัวเข้าถึงเช่น str หรือ dt
>>> diamonds.dtypes กะรัต float64 หมวดหมู่ตัด หมวดหมู่สี ความคมชัด หมวดหมู่ ความลึก float64 ตาราง float64 ราคา int64 x float64 y float64 z float64 cut_enc int64 dtype: วัตถุ
สามารถใช้ฟังก์ชันพิเศษมากมายโดยใช้ cat accessor ในคอลัมน์หมวดหมู่ มันมีฟังก์ชั่นเช่นหมวดหมู่เพื่อค้นหาที่ไม่ซ้ำกัน rename_categories เพื่อเปลี่ยนชื่อคุณสมบัติ
เพชร["new_cuts"] = เพชร["cut"].cat.rename_categories(list("ABCDE")) >>> เพชร["new_cuts"].cat.categories Index(['A', 'B', ' C', 'D', 'E'], dtype='object')
ตรวจสอบรายการนี้เพื่อดูรายการฟังก์ชันเพิ่มเติมภายใต้ อุปกรณ์สำหรับแมว.
บีบ
Squeeze เป็นฟังก์ชันที่ใช้ในสถานการณ์ขอบที่หายากแต่ทำให้รุนแรงขึ้น
เมื่อค่าเดียวถูกส่งกลับจากเงื่อนไขที่ใช้ในการย่อย DataFrame นี่เป็นหนึ่งในกรณีเหล่านี้ พิจารณาสถานการณ์สมมติต่อไปนี้:
เซตย่อย = diamonds.loc[diamonds.index >> subset
แม้ว่าจะมีเพียงเซลล์เดียว ให้ส่งคืน DataFrame ไม่สะดวกเนื่องจากตอนนี้คุณต้องใช้.loc กับทั้งชื่อคอลัมน์และดัชนีเพื่อรับราคา
คุณไม่จำเป็นต้องทำถ้าคุณรู้วิธีบีบ แกนสามารถลบออกจาก DataFrame หรือ Series เซลล์เดียวได้โดยใช้ฟังก์ชันนี้ พิจารณาสถานการณ์สมมติต่อไปนี้:
>>> subset.squeeze() 326
สามารถระบุแกนที่จะลบได้ ตอนนี้มันกลับเป็นสเกลาร์เท่านั้น
>>> subset.squeeze("columns") # หรือ "rows" 0 326 ชื่อ: ราคา, dtype: int64
โปรดทราบว่าฟังก์ชันนี้ใช้ได้กับ Series หรือ DataFrame ที่มีค่าเดียวเท่านั้น
Excel_writer
เป็นคลาสทั่วไปสำหรับสร้างไฟล์ excel และเขียน DataFrame ลงไป พิจารณา เรามีชุดข้อมูลสองชุดนี้
# โหลดชุดข้อมูลเพชรสองชุด = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # เขียนไปยังไฟล์ excel เดียวกันกับ pd.ExcelWriter("data/data.xlsx") เป็นผู้เขียน: diamonds.to_excel (นักเขียน, sheet_name="เพชร") tips.to_excel(นักเขียน, sheet_name="เคล็ดลับ")
มีคุณสมบัติในการระบุรูปแบบ DateTime ที่จะใช้ ไม่ว่าคุณจะต้องการไฟล์ใหม่หรือแก้ไขไฟล์ที่มีอยู่ จะเกิดอะไรขึ้นถ้ามีชีตอยู่ ตรวจสอบสิ่งนี้ เอกสาร .
สรุป
ไม่ใช่ภาพรวมที่ละเอียดถี่ถ้วนของแพนด้าและ เอกสาร มีข้อมูลเพิ่มเติมเกี่ยวกับรหัสและคุณสมบัติ เราขอแนะนำให้คุณทดลองกับรูปแบบต่างๆ ของข้อมูลโค้ดที่มีให้ที่นี่ รวมทั้งพารามิเตอร์ต่างๆ เราสามารถเข้าใจพลังของแพนด้าได้อย่างเต็มที่ด้วยการทำเช่นนี้
ไลบรารีต่างๆ เช่น Dask และ datatable ค่อยๆ แทนที่ Pandas ด้วยคุณสมบัติใหม่ที่ฉูดฉาดสำหรับการจัดการชุดข้อมูลขนาดใหญ่ Pandas ยังคงเป็นเครื่องมือจัดการข้อมูลที่ใช้กันอย่างแพร่หลายที่สุดในชุมชนวิทยาศาสตร์ข้อมูล Python เนื่องจากมันเข้ากับสแต็ก SciPy ปัจจุบันได้ดีเพียงใด ไลบรารีจึงทำหน้าที่เป็นกระบวนทัศน์สำหรับแพ็คเกจอื่นๆ ในการติดตามและสร้าง
ฉันหวังว่าคุณจะพบโพสต์นี้ที่ชาญฉลาดและขอขอบคุณที่อ่าน
สื่อที่แสดงในบทความนี้ไม่ใช่ของ Analytics Vidhya และใช้ดุลยพินิจของผู้เขียน
ที่เกี่ยวข้อง
- "
- 100
- 7
- ทั้งหมด
- การวิเคราะห์
- การวิเคราะห์
- ข้อโต้แย้ง
- บทความ
- ที่ดีที่สุด
- การส่งเสริม
- บอสตัน
- สร้าง
- โทรศัพท์
- กรณี
- เปลี่ยนแปลง
- การทำความสะอาด
- รหัส
- คอลัมน์
- ร่วมกัน
- ชุมชน
- คำนวณ
- การสร้าง
- ข้อมูล
- การวิเคราะห์ข้อมูล
- วิทยาศาสตร์ข้อมูล
- นักวิทยาศาสตร์ข้อมูล
- วันที่
- DID
- โรค
- ดอลลาร์
- ขอบ
- Excel
- การทดลอง
- ธรรม
- ลักษณะ
- คุณสมบัติ
- ทางการเงิน
- ชื่อจริง
- ปฏิบัติตาม
- รูป
- ฟังก์ชัน
- เหตุการณ์ที่
- ดี
- ขึ้น
- การจัดการ
- มีประโยชน์
- โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม
- จุดสูง
- สรุป ความน่าเชื่อถือของ Olymp Trade?
- ทำอย่างไร
- HTTPS
- ดัชนี
- ข้อมูล
- IT
- คีย์
- ภาษา
- ใหญ่
- การเรียนรู้
- ห้องสมุด
- รายการ
- รายการ
- โหลด
- เงินกู้
- เรียนรู้เครื่อง
- การจัดการ
- หน้ากาก
- ภาพบรรยากาศ
- คุณสมบัติใหม่
- ตัวเลข
- Options
- อื่นๆ
- ตัวอย่าง
- คน
- ท่อ
- อำนาจ
- ความแม่นยำ
- Premium
- นำเสนอ
- ราคา
- การเขียนโปรแกรม
- หลาม
- แรม
- พิสัย
- การอ่าน
- ผลสอบ
- วิทยาศาสตร์
- นักวิทยาศาสตร์
- ชุด
- ง่าย
- ขนาด
- So
- แก้
- เริ่มต้น
- ร้านค้า
- เวลา
- เคล็ดลับ
- ด้านบน
- Unicode
- us
- ความคุ้มค่า
- รายละเอียด
- WHO
- ภายใน
- โรงงาน
- โลก
- นักเขียน
- การเขียน
- X