所以我有这个数据框
# list of strings
lst = ['Geeks', 'For', 'Geeks', 'is', 'portal', 'for', 'Geeks']
# list of int
lst2 = ["gdadsf", '23', 'gggg', '22', 'df', '66', '77']
# Calling DataFrame constructor after zipping
# both lists, with columns specified
df = pd.DataFrame(list(zip(lst, lst2)),
columns =['Name', 'val'])
df.loc[(df['Name']=='Geeks')&('gggg' in df['val'].to_string())]
,结果如下所示,它选择了包含Geeks的所有行,而不仅仅是第2行
0 Geeks gdadsf
2 Geeks gggg
6 Geeks 77
更新:这是How do I test if a string is in a cell of a pandas data frame, cell that contains a list of strings?
引起的延续或问题。Update2:如果我将其与上述其他问题联系起来,我的查询无济于事。请注意现在存储在单元格中的字符串列表
# list of strings
lst = ['Geeks', 'For', 'Geeks', 'is', 'portal', 'for', 'Geeks']
# list of int
lst2 = [["gdadsf",'jjjj'], ['23'], ['gggg','hhh'], ['22'], ['df'], ['66'], ['77','zzz'] ]
# Calling DataFrame constructor after zipping
# both lists, with columns specified
df = pd.DataFrame(list(zip(lst, lst2)),
columns =['Name', 'val'])
df.loc[(df['Name']=='Geeks')&(df['val'].str.contains('gggg'))]
答案 0 :(得分:0)
to_string()
将所有内容连接为一个长字符串。本质上,您的代码是
df.loc[(df['Name']=='Geeks')& True]
这将为您提供所有具有Name
等于'Geeks'
的行。所以你不想要那个,你想要的:
df.loc[(df['Name']=='Geeks')&( df['val'].str.contains('gggg'))]
答案 1 :(得分:0)
在您的情况下,每次都是如此,因为隶属度函数in
每次都会求值为True
。
您应该添加类似的条件,检查是否等于值。如下所示。
print(df.loc[(df['Name']=='Geeks')&(df['val']=='gggg')])
如果要检查and
条件中有多个值,请使用isin
,如下所示。
print(df.loc[(df['Name']=='Geeks')&(df.val.isin(['gggg','77']))])