熊猫数据框-在特定条件下获取价值

时间:2019-07-26 03:15:27

标签: python python-3.x pandas

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

,仅直接获取值。

但这是行不通的,有人知道解决方案吗?预先感谢。

3 个答案:

答案 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]

如果可能的话返回空系列,则失败。


因此,一般的解决方案是将nextiter

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')