print df
id product_id product_title search_term relevance
0 2 100001 Simpsom Strong anglebracket 3.00
1 3 100001 Simpsom Strong ibracket 2.50
2 16 100005 Delta Vero rainshowerhead 2.33
假设我的ID = 3,并希望与之关联的search_term(仅值)。我将如何提取?
答案代码为:
target = df.loc[df['id']==3, 'search_term']
print target
但是,它会返回整个熊猫系列,其中包括索引:
1 ibracket
Name: search_term, dtype: object
不只是值'ibracket'。
我知道我可以通过以下方法获得价值:
target_i = df.loc[df['id']==16, 'search_term'].index[0]
target = df ['search_term'] [target_i]
所以我只能得到想要的值。但我认为应该有一种类似的方式:
target = df.loc[df['id']==16, 'search_term'].value
,仅直接获取值。
但这是行不通的,有人知道解决方案吗?预先感谢。
答案 0 :(得分:0)
df.loc[df['id']==16, 'search_term']
id==some_value
可以有多行,因此正确的设计是返回一系列匹配项,而不是一个值。这就是为什么获得系列而不是单个值的原因。
答案 1 :(得分:0)
您正在做的很长的路要走。这有效:
search_term = df.loc[df['id'] == 3, 'search_term'].iloc[0]
任何系列可以包含0到许多元素。 iloc[0]
获取该系列中第一个元素的值。对于生产,应首先检查系列是否为空。
答案 2 :(得分:0)
如果始终匹配至少一个值,则有必要先选择search_term
按位置选择-Series.iat
或将Series的值转换为numpy数组并通过索引选择:
target_i = df.loc[df['id']==16, 'search_term'].iat[0]
target_i = df.loc[df['id']==16, 'search_term'].values[0]
#pandas 0.24+ solution
target_i = df.loc[df['id']==16, 'search_term'].to_numpy()[0]
如果可能的话返回空系列,则失败。
因此,一般的解决方案是将next
与iter
:
target_i = newxt(iter(df.loc[df['id']==16, 'search_term']), 'no match')
target_i = newxt(iter(df.loc[df['id']==16000, 'search_term']), 'no match')