Je voudrais filtrer proprement un dataframe à l'aide de regex sur l'une des colonnes.
Pour un exemple artificiel:
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
Je veux filtrer les lignes sur celles qui commencent par f
utiliser une expression régulière. Commencez par:
In [213]: foo.b.str.match('f.*')
Out[213]:
0 []
1 ()
2 ()
3 []
Ce n'est pas très utile. Cependant, cela me donnera mon index booléen:
In [226]: foo.b.str.match('(f.*)').str.len() > 0
Out[226]:
0 False
1 True
2 True
3 False
Name: b
Donc je pourrais alors faire ma restriction en:
In [229]: foo[foo.b.str.match('(f.*)').str.len() > 0]
Out[229]:
a b
1 2 foo
2 3 fat
Cela me fait mettre artificiellement un groupe dans l'expression régulière, et cela ne semble peut-être pas la voie à suivre. Y a-t-il une meilleure manière de faire cela?
foo[foo.b.str.match('(f.*)').str.len() > 0]
c'est une assez bonne solution! Plus personnalisable et utile que commence avec, car il contient la polyvalence de l'expression régulière.
foo[foo.b.str.match('f.*')]
fonctionne dans pandas 0.24.2 pour moi.
foo[foo.b.str.startswith("f")]
cela fonctionnera.