ฉันต้องการกรองดาต้าเฟรมอย่างละเอียดโดยใช้ regex ในหนึ่งในคอลัมน์
สำหรับตัวอย่างที่วางแผนไว้:
In [210]: foo = pd.DataFrame({'a' : [1,2,3,4], 'b' : ['hi', 'foo', 'fat', 'cat']})
In [211]: foo
Out[211]:
a b
0 1 hi
1 2 foo
2 3 fat
3 4 cat
ฉันต้องการกรองแถวเป็นแถวที่ขึ้นต้นด้วยการf
ใช้ regex ไปก่อน:
In [213]: foo.b.str.match('f.*')
Out[213]:
0 []
1 ()
2 ()
3 []
นั่นไม่ได้มีประโยชน์มากเกินไป อย่างไรก็ตามสิ่งนี้จะได้รับดัชนีบูลีนของฉัน:
In [226]: foo.b.str.match('(f.*)').str.len() > 0
Out[226]:
0 False
1 True
2 True
3 False
Name: b
ดังนั้นฉันสามารถทำข้อ จำกัด ของฉันโดย:
In [229]: foo[foo.b.str.match('(f.*)').str.len() > 0]
Out[229]:
a b
1 2 foo
2 3 fat
นั่นทำให้ฉันใส่กลุ่มเข้าไปใน regex อย่างดุเดือดและดูเหมือนว่าอาจจะไม่ใช่วิธีที่สะอาด มีวิธีที่ดีกว่าในการทำเช่นนี้?
foo[foo.b.str.match('(f.*)').str.len() > 0]
เป็นทางออกที่ดีพอสมควร! ปรับแต่งได้และมีประโยชน์มากกว่า startswith เพราะมันบรรจุความสามารถรอบด้านของ regex
foo[foo.b.str.match('f.*')]
งานได้ใน pandas 0.24.2 สำหรับฉัน
foo[foo.b.str.startswith("f")]
จะทำงานได้