Ich möchte einen Datenrahmen mit Regex in einer der Spalten sauber filtern.
Für ein erfundenes 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 möchte die Zeilen nach denen filtern, die mit der f
Verwendung eines regulären Ausdrucks beginnen. Zuerst gehen:
In [213]: foo.b.str.match('f.*')
Out[213]:
0 []
1 ()
2 ()
3 []
Das ist nicht allzu nützlich. Dies bringt mir jedoch meinen booleschen Index:
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 meine Einschränkung tun, indem ich:
In [229]: foo[foo.b.str.match('(f.*)').str.len() > 0]
Out[229]:
a b
1 2 foo
2 3 fat
Das bringt mich jedoch dazu, eine Gruppe künstlich in den regulären Ausdruck zu bringen, und scheint vielleicht nicht der richtige Weg zu sein. Gibt es einen besseren Weg, dies zu tun?
foo[foo.b.str.match('(f.*)').str.len() > 0]
ist eine ziemlich gute Lösung! Anpassbarer und nützlicher als Starts, da es die Vielseitigkeit von Regex bietet.
foo[foo.b.str.match('f.*')]
funktioniert in Pandas 0.24.2 für mich.
foo[foo.b.str.startswith("f")]
wird es funktionieren.