【问题标题】:Filtering for 'contains value' in a dataset in Python [duplicate]在Python中过滤数据集中的“包含值”[重复]
【发布时间】:2020-12-17 01:54:44
【问题描述】:

在 Python 中,如何按包含特定值的值过滤列?

一个示例是一个数据集,其中有一列名为“City”,值可能是“Sydney”、“Greater Sydney”、“North Sydney”等。如果使用输入“Sydney”,我如何确保所有变体是否包含在过滤中?

#user inputs column
input1 = input()
country_city = input1.title()

#user inputs value
input2 = input()
country_city_value = input2.title()

#filtering step (current)
filtered = dataset[dataset[country_city] == country_city_value]
print(filtered)

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    如果要过滤包含输入单词的内容,请应用str.contains

    data = {'City': ['Sydney', 'Greater Sydney', 'North Sydney'],}
    
    dataset = pd.DataFrame(data, columns = ['City'])
    
    #user inputs column
    input1 = input()              
    country_city = input1.title()        # 'City'
    
    #user inputs value
    input2 = input()
    country_city_value = input2.title()  # 'Sydney'
    
    #filtering step (current)
    filtered = dataset[dataset[country_city].str.contains(country_city_value)]
    
    #              City
    # 0          Sydney
    # 1  Greater Sydney
    # 2    North Sydney
    print(filtered)
    

    【讨论】:

    • 这是我的想法,但是当我使用它运行脚本时,它返回以下错误: ValueError: Cannot mask with non-boolean array contains NA / NaN values
    • @TC1111 你能添加一些示例输入吗?无论如何dropna 和/或fillna 可能有用
    【解决方案2】:

    str.contains 是不错的选择,但如果您的输入是“北悉尼”,您将不会收到 Sydney,因此只会收到 north sydney 示例:

    df= pd.DataFrame({
        'A':['Sydney','North Sydney','Alaska']
    
    })
    print(df)
                  A
    0        Sydney
    1  North Sydney
    2        Alaska
    input='North Sydney'
    filtered = df[df.A.str.contains(input)]
    
    print(filtered)
                  A
    1  North Sydney
    

    所以要改进这种方式,请使用split() with str.contains()

    input=input.split()
    print(input)
    ['North', 'Sydney']
    
    filtered = df[df.A.str.contains('%s'%[x for x in input])]
    
    print(filtered)
                  A
    0        Sydney
    1  North Sydney
    

    所以通过这种方式,您可以确定您输入的所有部分都会被考虑在内

    【讨论】:

    • @Aviv Yaniv 搜索您的系列是否包含您输入的每个部分。对于这个例子SydneyNorth
    猜你喜欢
    • 1970-01-01
    • 2019-04-11
    • 2020-12-22
    • 2020-12-19
    • 2019-04-28
    • 2021-10-04
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多