如何通过正则表达式过滤熊猫中的行

新手上路,请多包涵

我想在其中一列上使用正则表达式干净地过滤数据框。

对于一个人为的例子:

 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 开头的行。首先去:

 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

不过,这让我人为地将一个组放入正则表达式中,而且看起来可能不是一个干净的方法。有一个更好的方法吗?

原文由 justinvf 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 157
1 个回答

使用 包含 代替:

 In [10]: df.b.str.contains('^f')
Out[10]:
0    False
1     True
2     True
3    False
Name: b, dtype: bool

原文由 waitingkuo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题