【问题标题】:dynamically masking a pandas df to find rows that match strings from a list动态屏蔽 pandas df 以查找与列表中的字符串匹配的行
【发布时间】:2020-12-11 08:26:00
【问题描述】:

大家好 我有以下代码:我想通过将“hi”更改为一个变量来使我的脚本更具动态性,如果 my_list 中的任何字符串在 df 中,该变量将屏蔽。我正在处理 my_list 的项目最多可以包含 50 个元素。

df = pd.DataFrame({'First Column Name':  ["Hi", "lo"],
        'Second Column Name': ['Hi', 'lo']})

my_list = ["Hi", "med"]

mask = np.column_stack([df [col].str.contains("hi",flags=re.IGNORECASE ,na=False) for col in df])
x = df.loc[mask.any(axis=1)]
print(x)

返回:

First Column Name Second Column Name
0                Hi                 Hi

【问题讨论】:

    标签: python pandas list numpy dataframe


    【解决方案1】:

    改成

    m = df.apply(lambda x : x.str.contains('|'.join(my_list), flags=re.IGNORECASE)).any(1)
    x = df[m]
    Out[30]: 
      First Column Name Second Column Name
    0                Hi                 Hi
    

    【讨论】:

    • 你知道有没有办法适应 m = df.apply(lambda x : x.str.contains('|'.join(my_list), flags=re.IGNORECASE)).any (1) 以便您也可以在非字符串上使用它?使用我的大部分 df 它可以工作,但有些会导致错误只能将 .str 访问器与字符串值一起使用!尽管我可以将带有这些字符的行转换为字符串,但我无法真正将整个列转换为字符串
    猜你喜欢
    • 1970-01-01
    • 2019-08-30
    • 2020-09-09
    • 2018-08-28
    • 2018-05-03
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多