เลือกแถวหมีแพนด้าตามดัชนีรายการ


107

ฉันมี dataframe df:

   20060930  10.103       NaN     10.103   7.981
   20061231  15.915       NaN     15.915  12.686
   20070331   3.196       NaN      3.196   2.710
   20070630   7.907       NaN      7.907   6.459

จากนั้นฉันต้องการเลือกแถวที่มีหมายเลขลำดับที่ระบุไว้ในรายการสมมติว่านี่คือ [1,3] จากนั้นซ้าย:

   20061231  15.915       NaN     15.915  12.686
   20070630   7.907       NaN      7.907   6.459

อย่างไรหรือฟังก์ชั่นอะไรได้บ้าง?

คำตอบ:


132
List = [1, 3]
df.ix[List]

ควรทำเคล็ดลับ! เมื่อฉันทำดัชนีด้วย data frames ฉันจะใช้เมธอด. ix () เสมอ ง่ายและยืดหยุ่นกว่ามาก ...

UPDATE นี่ไม่ใช่วิธีที่ยอมรับในการสร้างดัชนีอีกต่อไป ixวิธีเลิก ใช้.ilocสำหรับการจัดทำดัชนีตามจำนวนเต็มและ.locสำหรับการจัดทำดัชนีตามป้ายกำกับ


15
ตอนนี้เลิกใช้แล้ว. ควรใช้ .iloc สำหรับการจัดทำดัชนีตำแหน่ง
t_warsop

87

คุณยังสามารถใช้ iloc:

df.iloc[[1,3],:]

สิ่งนี้จะใช้ไม่ได้หากดัชนีในดาต้าเฟรมของคุณไม่สอดคล้องกับลำดับของแถวเนื่องจากการคำนวณก่อนหน้านี้ ในกรณีนั้นให้ใช้:

df.index.isin([1,3])

... ตามที่แนะนำในคำตอบอื่น ๆ


62

อีกวิธีหนึ่ง (แม้ว่าจะเป็นรหัสที่ยาวกว่า) แต่จะเร็วกว่ารหัสข้างต้น ตรวจสอบโดยใช้ฟังก์ชัน% timeit:

df[df.index.isin([1,3])]

PS: คุณหาเหตุผล

ป้อนคำอธิบายภาพที่นี่


1
ใช้df.index.get_level_values(0).isinสำหรับ multiindex
CiaranWelsh

4

สำหรับชุดข้อมูลขนาดใหญ่หน่วยความจำมีประสิทธิภาพในการอ่านเฉพาะแถวที่เลือกผ่านskiprowsพารามิเตอร์

ตัวอย่าง

pred = lambda x: x not in [1, 3]
pd.read_csv("data.csv", skiprows=pred, index_col=0, names=...)

ตอนนี้จะส่งคืน DataFrame จากไฟล์ที่ข้ามแถวทั้งหมดยกเว้น 1 และ 3


รายละเอียด

จากเอกสาร :

skiprows : list-like หรือ integer หรือ callable ค่าเริ่มต้น None

...

หากเรียกได้ฟังก์ชันที่เรียกได้จะได้รับการประเมินเทียบกับดัชนีแถวโดยส่งกลับค่า True หากควรข้ามแถวและเป็นเท็จ ตัวอย่างของอาร์กิวเมนต์ที่เรียกใช้ได้ที่ถูกต้องจะเป็นlambda x: x in [0, 2]

คุณลักษณะนี้ใช้งานได้ในเวอร์ชันแพนด้า 0.20.0+ เห็นแล้วยังปัญหาที่สอดคล้องกันและโพสต์ที่เกี่ยวข้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.