返回数据框行以进行特定的整数搜索

时间:2019-08-27 22:06:40

标签: python dataframe

我想返回一个不包含特定整数(例如2)的过滤数据帧。但是,它确实需要返回具有整数(例如12或22或200 ...等)的行。

示例:

d = {'num_list': ["1,2,3,10,11,12,13","","4,5,6","11,12,13","2,3,4,12","12,13"]}
searchfor = "2"

df = pd.DataFrame(data=d)

filtered_df = df[~df['num_list'].str.contains(searchfor)]

数据框:

                num_list
0      1,2,3,10,11,12,13
1
2                  4,5,6
3               11,12,13
4               2,3,4,12
5                  12,13

预期结果:

                num_list
1
2                  4,5,6
3               11,12,13
5                  12,13

实际结果:

                num_list
1
2                  4,5,6

此代码与在第3行和第5行中也存在的字符串“ 2”匹配。试图找到解决该问题的正确方法。我正在考虑将num_list更改为列表,但是我不知道如何过滤数据框列表。

d = {'num_list': [[1,2,3,10,11,12,13],[],[4,5,6],[11,12,13],[2,3,4,12],[12,13]]}
searchfor = 2

df = pd.DataFrome(data=d)

??

数据框:

                   num_list
0 [1, 2, 3, 10, 11, 12, 13]
1                        []
2                 [4, 5, 6]
3              [11, 12, 13]
4             [2, 3, 4, 12]
5                  [12, 13]

这是正确的方法吗?如何返回没有特定整数2的行(即返回行1,2,3,5)?预先感谢。

1 个答案:

答案 0 :(得分:1)

根据建议in this great answer,您可以使用掩码和apply函数来解决问题。

d = {'num_list': [[1,2,3,10,11,12,13],[],[4,5,6],[11,12,13],[2,3,4,12],[12,13]]}
searchfor = 2
df = pd.DataFrame(data=d)

# Here we create our mask that is essentially a list of True and False for
# each row on which the condition applies. 
mask = df.num_list.apply(lambda x: searchfor not in x)

# Now we can apply the mask to df
df_filtered = df[mask]

未过滤的数据框:

>>> df
                    num_list
0  [1, 2, 3, 10, 11, 12, 13]
1                         []
2                  [4, 5, 6]
3               [11, 12, 13]
4              [2, 3, 4, 12]
5                   [12, 13]

df_filtered的结果现在包含除由searchfor中的值组成的行以外的所有行:

>>> df_filtered
    num_list
1            []
2     [4, 5, 6]
3  [11, 12, 13]
5      [12, 13]