我想返回一个不包含特定整数(例如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)?预先感谢。
答案 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]