【问题标题】:How to get a single value as a string from pandas data frame如何从熊猫数据框中获取单个值作为字符串
【发布时间】:2019-04-14 19:09:27
【问题描述】:

我正在从我的数据框中查询一个似乎是“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

【问题讨论】:

  • 尝试使用t = df[df['Host'] == 'a']['Port'][0]t = df[df['Host'] == 'a']['Port'][1]。在过去的调试过程中,我对此工作有一个模糊的记忆。
  • 很好,t = df[df['Host'] == 'a']['Port'][1] 工作
  • 使用 .loc df.loc[df['Host'] == 'a','Port'][0]
  • @OamarKanji,应该是简单的df[df['Host'] == 'a']['Port'][0] 或`print(df[df['Host'] == 'a']['Port'][0])
  • @OamarKanji 很高兴有帮助,我将评论移至答案

标签: python pandas numpy


【解决方案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

根据索引寻找不同的a & c

>>> df[df['Host'] == 'a']['Port'][0]
'b'
>>> df[df['Host'] == 'c']['Port'][1]
'c'

【讨论】:

    【解决方案2】:

    如果你能保证只返回一个结果,使用loc并调用item

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

    或者,类似地,

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

    ...获取 first 值(类似地,.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 将返回第一个索引(并返回不正确的结果)。

    【讨论】:

    • FutureWarning: 'item' has been deprecated and will be removed in a future version
    • @rraadd88 你确定吗?文档没有说here?
    • 是的,由于某种原因,警告不再存在。奇怪。
    • 或者,您可以使用df.Host.values 获取包含Host 列值的列表,或者使用df.Host.values[0]df.Port.values[0] 获取字符串值。如果我错了,请纠正我,它对我有用
    【解决方案3】:

    正如我在评论中提到的,使用 [1] 之后应该可以工作,以提取您正在寻找的变量。

    t = df[df['Host'] == 'a']['Port'][1]
    

    【讨论】:

    • 如上所述,无论正确的值是在第0位还是第1位,如果索引是从0开始的RangeIndex,这将不起作用。
    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 2020-06-03
    • 2016-01-29
    • 1970-01-01
    相关资源
    最近更新 更多