pandas DataFrame 过滤器正则表达式

新手上路,请多包涵

我不明白 pandas DataFrame filter

设置

import pandas as pd

df = pd.DataFrame(
    [
        ['Hello', 'World'],
        ['Just', 'Wanted'],
        ['To', 'Say'],
        ['I\'m', 'Tired']
    ]
)

问题

df.filter([0], regex=r'(Hel|Just)', axis=0)

我希望 [0] 将第一列指定为要查看的列,并且 axis=0 指定过滤行。我得到的是:

        0      1
0  Hello  World

我在期待

       0       1
0  Hello   World
1   Just  Wanted

问题

  • 什么会让我得到我所期望的?

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

阅读 732
2 个回答

根据 文档

参数是互斥的,但不检查

因此,看起来,第一个可选参数 items=[0] 胜过第三个可选参数 regex=r'(Hel|Just)'

 In [194]: df.filter([0], regex=r'(Hel|Just)', axis=0)
Out[194]:
       0      1
0  Hello  World

相当于

In [201]: df.filter([0], axis=0)
Out[201]:
       0      1
0  Hello  World

这只是选择索引值在 [0] 沿 0 轴的行。


要获得所需的结果,您可以使用 str.contains 创建布尔掩码,并使用 df.loc 选择行:

 In [210]: df.loc[df.iloc[:,0].str.contains(r'(Hel|Just)')]
Out[210]:
       0       1
0  Hello   World
1   Just  Wanted

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

这应该工作:

df[df[0].str.contains('(Hel|Just)', regex=True)]

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

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