如何从pandas数据框中获取单个值作为字符串

42
我正在从数据框中查询一个单一的值,它似乎是“dtype: object”。我只想打印该值本身,而不打印索引或其他信息。我该如何做到这一点?
col_names = ['Host', 'Port']
df = pd.DataFrame(columns=col_names)
df.loc[len(df)] = ['a', 'b']

t = df[df['Host'] == 'a']['Port']
print(t)

输出: 在此输入图片描述

预期输出: b


1
尝试使用t = df[df['Host'] == 'a']['Port'][0]或者t = df[df['Host'] == 'a']['Port'][1]。我模糊地记得在过去的调试中这个方法对我有效。 - PL200
不错,t = df[df['Host'] == 'a']['Port'][1] 工作了。 - Oamar Kanji
使用 .loc df.loc[df['Host'] == 'a','Port'][0] - BENY
@OamarKanji,应该很简单 df[df['Host'] == 'a']['Port'][0] 或者 print(df[df['Host'] == 'a']['Port'][0]) - Karn Kumar
@OamarKanji 很高兴能够帮助,我把我的评论移到了答案中。 - PL200
OP,请仔细阅读所有答案。@PL200给出的答案并不完全正确,因为它只适用于索引从0开始的情况。我已经举了一个例子。 - cs95
4个回答

70

如果您可以保证只返回一个结果,请使用 loc 并调用 item

>>> df.loc[df['Host'] == 'a', 'Port'].item()
'b'

或者,同样地,

>>> df.loc[df['Host'] == 'a', 'Port'].values[0]
'b'

...要获取第一个值(同样,.values[1]代表第二个值)。这比使用df.loc[df['Host'] == 'a', 'Port'][0]更好,因为如果您的DataFrame如下所示,

  Host Port
1    a    b

这时将会抛出 "KeyError: 0" 异常

df.loc[df['Host'] == 'a', 'Port'][0]
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)

或者,使用at

>>> df.at[df['Host'].eq('a').idxmax(), 'Port']
'b'

缺点是如果 'a' 不存在,idxmax 将返回第一个索引(并返回不正确的结果)。


2
FutureWarning: 'item' has been deprecated and will be removed in a future version - user3521099
@rraadd88 你确定吗?文档里没有这么说 这里 - cs95
是的,出于某种原因,那个警告不再存在了。很奇怪。 - user3521099
或者,您可以使用 df.Host.values 获取 Host 列的值列表,或者使用 df.Host.values[0]df.Port.values[0] 获取字符串值。如果我错了,请纠正我,它对我有用。 - ferrum

7
t = df['Host'].values[0] 

将会给你第一个值。如果你需要一个字符串,只需这样做:

t = str(df['Host'].values[0])

1

它应该简单地工作。

>>> df
  Host Port
0    a    b
>>> df[df['Host'] == 'a']['Port'][0]   # will choose the first index simply which is 'b'
'b'

或者,使用print函数,它会去掉被单引号包围的内容。

>>> print(df[df['Host'] == 'a']['Port'][0])
b

这将更容易,因为您只需选择所需的索引,即使在多个值跨越Port列的情况下也是如此。 示例:
>>> df
  Host Port
0    a    b
1    c    c

寻找基于索引的不同的ac
>>> df[df['Host'] == 'a']['Port'][0]
'b'
>>> df[df['Host'] == 'c']['Port'][1]
'c'

1
正如我在评论中提到的那样,之后使用 [1] 应该可以获取你所寻找的变量。
t = df[df['Host'] == 'a']['Port'][1]

如上所述,无论正确的值位于第0个还是第1个位置,如果索引是从0开始的RangeIndex,则此方法将无法正常工作。 - cs95

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接