【问题标题】:Pandas: how to select row with certain word熊猫:如何选择带有特定单词的行
【发布时间】:2018-08-10 21:53:13
【问题描述】:

如何只显示文本中包含 * AV * 之类的单词的行,例如“AV Snow”或“AV (Some)”或“Me AV”

# Select Structural status = 'AVAILABLE' or like *AV*
value_list = ['AVAILABLE', '[AV]']

'[AV]' 似乎不正确

# Grab DataFrame rows where column has certain values
new_df = df[df.STRUCTURALSTATUS.isin(value_list)]
new_df.shape

【问题讨论】:

    标签: python regex string pandas


    【解决方案1】:

    如果您想使用正则表达式模式,您可能想在您的系列上使用str.contains 来过滤 DataFrame。然后你可以在你的结果上应用一个带有 isin 函数的列表。

    例子:

    df[df.STRUCTURALSTATUS.str.contains('[AV]')]
    

    【讨论】:

    • 嗨我有这个错误:AttributeError: 'Series' object has no attribute 'contains'
    • 对不起,我忘记了包含之前的 str
    • 似乎不起作用,其他词也出现了......没有被过滤掉
    【解决方案2】:

    这是一种方法。

    解决方案

    import pandas as pd
    
    df = pd.DataFrame({'A': ['AV', 'AV Snow', 'Test', 'AV (Some)',
                             'Nothing', 'Me AV', 'Available', 'NA']})
    
    df = df[df['A'].str.contains('AV', regex=False, case=False, na=False)]
    

    结果

               A
    0         AV
    1    AV Snow
    3  AV (Some)
    5      Me AV
    6  Available
    

    说明

    • regex=False 禁用正则表达式,因为您的特定任务不需要它。
    • case=False 使搜索不区分大小写。
    • na=False 表示如果您的系列中有不寻常的类型,您将不会看到错误,例如非字符串。

    【讨论】:

    • 嗨,但我不想选择“AV-Default”这个词。那么我如何选择包含“AV”而不是“AV-Default”
    • 你能解释一下为什么不使用 AV-Default 吗?那是你不想要的唯一一个有 AV 的吗?
    • 你可以使用df = df[df['A'].str.contains('AV', regex=False, case=False, na=False) & (df['A'] != 'AV-Default')]
    • 谢谢,稍作修改,任何包含“xxx AV-Default”之类的词也要过滤掉,总之AV-Default字符串中包含这个词。
    • df = df[df['A'].str.contains('AV', regex=False, case=False, na=False) & ~(df['A'].str.contains('AV-Default', regex=False, case=False, na=False)]
    猜你喜欢
    • 2018-05-20
    • 1970-01-01
    • 2019-02-12
    • 2020-08-01
    • 2022-01-21
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多