Tôi muốn lọc sạch một khung dữ liệu bằng regex trên một trong các cột.
Đối với một ví dụ giả định:
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
Tôi muốn lọc các hàng cho những hàng bắt đầu f
bằng regex. Đầu tiên đi
In [213]: foo.b.str.match('f.*')
Out[213]:
0 []
1 ()
2 ()
3 []
Điều đó không quá hữu ích. Tuy nhiên, điều này sẽ giúp tôi có được chỉ số boolean của mình:
In [226]: foo.b.str.match('(f.*)').str.len() > 0
Out[226]:
0 False
1 True
2 True
3 False
Name: b
Vì vậy, sau đó tôi có thể thực hiện hạn chế của mình bằng cách:
In [229]: foo[foo.b.str.match('(f.*)').str.len() > 0]
Out[229]:
a b
1 2 foo
2 3 fat
Điều đó làm cho tôi giả tạo đưa một nhóm vào regex, và dường như có thể không phải là con đường sạch sẽ để đi. Có cách nào tốt hơn để làm điều này?
foo[foo.b.str.match('(f.*)').str.len() > 0]
là một giải pháp đủ tốt! Tùy biến và hữu ích hơn so với startwith vì nó chứa tính linh hoạt của regex trong đó.
foo[foo.b.str.match('f.*')]
hoạt động trong gấu trúc 0,24.2 cho tôi.
foo[foo.b.str.startswith("f")]
sẽ hoạt động.