在包含列表中的字符串的数据框中搜索一行
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 的另一列中的字符串值中从数据框中的一列中搜索字符串?