如何在pandas dataframe中搜索特定列中字符串值,如果存在,则给予dataframe中存在的行的输出?

puruo6ea  于 2023-04-19  发布在  其他
关注(0)|答案(2)|浏览(171)

我想搜索一个数据库,我有一个.pkl文件。
我已经加载了.pkl文件并将其存储在名为load_data的变量中。
现在,我需要使用原始输入接受一个字符串输入,并在数据集的一个特定列' SMILES '中搜索该字符串。
如果字符串匹配,我需要显示整行,即对应于该行的所有列值。
这是可能的吗?如果是,我应该怎么做?

t98cgbkg

t98cgbkg1#

使用boolean indexing返回所有匹配的行:

df = pd.DataFrame({'a': [1,3,4],
                      'SMILES': ['a','dd b','f'],
                     'c': [1,2,0]})
print (df)
  SMILES  a  c
0      a  1  1
1   dd b  3  2
2      f  4  0

如果只需要检查字符串:

#raw_input for python 2, input for python 3
a = input('Enter String for SMILES columns: ') # f
#Enter String for SMILES columns: f
print (df[df['SMILES'] == a])
  SMILES  a  c
2      f  4  0

或者如果你需要检查一个子字符串,使用str.contains

a = input('Enter String for SMILES columns: ') # b 
print (df[df['SMILES'].str.contains(a)])
#Enter String for SMILES columns: b
  SMILES  a  c
1   dd b  3  2
5kgi1eie

5kgi1eie2#

下面的代码解决了我的问题。它搜索任何值基于regex在单列中,并会返回所有行基于搜索关键字。请根据您的需要更新regex。

单列搜索

regex = ".*" + your search keyword + ".*"

df.loc[df['your_col_name'].str.contains(regex, regex=True, case=False)]

在所有列中搜索

df[df.apply(lambda row: row.astype(str).str.contains(regex, regex=True, case=False).any(), axis=1)]

https://pandas.pydata.org/docs/reference/api/pandas.Series.str.contains.html

相关问题