Ich möchte sauber filtern einen Datenrahmen mit Regex auf einer der Spalten.So filtern Sie Zeilen in Pandas von Regex
Für ein konstruiertes Beispiel:
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
Ich mag die Zeilen diejenigen filtern, die mit f
mit einem regulären Ausdruck starten. Zuerst gehen:
In [213]: foo.b.str.match('f.*')
Out[213]:
0 []
1 ()
2 ()
3 []
Das ist nicht zu schrecklich nützlich. Dies wird jedoch mir meine boolean Index erhalten:
In [226]: foo.b.str.match('(f.*)').str.len() > 0
Out[226]:
0 False
1 True
2 True
3 False
Name: b
So konnte ich dann durch meine Einschränkung tun:
In [229]: foo[foo.b.str.match('(f.*)').str.len() > 0]
Out[229]:
a b
1 2 foo
2 3 fat
Das hat mich künstlich eine Gruppe in die regex obwohl setzen macht, und scheint, wie vielleicht auch nicht die sauberer Weg zu gehen. Gibt es einen besseren Weg, dies zu tun?
Wenn Sie sich nicht auf reguläre Ausdrücke fest gebunden, 'foo [foo.b.str.startswith ("f")] 'wird funktionieren. – DSM
IMHO Ich denke 'foo [foo.b.str.match ('(f. *)'). Str.len()> 0]' ist eine ziemlich gute Lösung! Anpassbarer und nützlicher als Startswith, weil es die Vielseitigkeit von Regex in sich vereint. –