繁体   English   中英

熊猫数据帧过滤器正则表达式

[英]pandas DataFrame filter regex

我不明白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

问题

  • 什么会让我达到我的预期?

根据文档

参数是互斥的,但这不会被检查

因此,看起来,第一个可选参数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

这应该有效:

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

这是一个链接方法:

df.loc[lambda x: x['column_name'].str.contains(regex_patern, regex = True)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM