在包含列表中的字符串的数据框中搜索一行

Posted

技术标签:

【中文标题】在包含列表中的字符串的数据框中搜索一行【英文标题】:Search for a row in a dataframe containing a string from a list 【发布时间】:2018-03-24 15:28:54 【问题描述】:

我正在尝试搜索row,其中包含列表中的字符串。

df:

           Column1            Out1
0          ['x', 'y']         (0, 2)
1          ['a', 'b']         (3, 0)
etc.

按照this 回答中的建议,我已尝试以下方法在list 下的list 中搜索包含'a' 的行 回答:

print df['Column1'].isin(['a'])

期待这样的结果:

1         ['a', 'b']          (3, 0)

但是,我似乎收到以下错误:

TypeError: unhashable type: 'list'

【问题讨论】:

【参考方案1】:

需要in 来检查列表中的值:

df = df[df['Column1'].apply(lambda x: 'a' in x)]

示例:

df = pd.DataFrame('Column1':[['x','y'], ['a','b']],
                   'Out1':[(0,2), (3,0)])
print (df)
  Column1    Out1
0  [x, y]  (0, 2)
1  [a, b]  (3, 0)

df1 = df[df['Column1'].apply(lambda x: 'a' in x)]
print (df1)
  Column1    Out1
1  [a, b]  (3, 0)

df1 = df[['a' in x for x in df['Column1']]]
print (df1)
  Column1    Out1
1  [a, b]  (3, 0)

【讨论】:

太棒了。再次感谢! ;) 一个比另一个有优势吗? 难题,第二个应该快一点,但如果是 NaN 则失败。【参考方案2】:

你一开始的做法是对的:

df['Column1'].isin(['a'])

但是你要用相同数据框的方括号括起来。

这是一个例子:

threads = ['1111', '2222', '3333', '4444']
dev_data = train[(train['thread_col'].isin(threads))]

(dev_data) 是一个包含结果行的数据框。

【讨论】:

以上是关于在包含列表中的字符串的数据框中搜索一行的主要内容,如果未能解决你的问题,请参考以下文章

如果子字符串列表中的任何值包含在数据框中的任何列中,则过滤行

如何在 python 的另一列中的字符串值中从数据框中的一列中搜索字符串?

如何在整个 Pandas 数据框中搜索字符串并获取包含它的列的名称?

是否可以在列表框中的一行中添加多个条目?

检查列表框中的所选项是否包含特定字符

在pandas数据框中搜索文本列而不进行循环