如何从Pandas DataFrame中获取值,而不是索引和对象类型

Edu*_*rdo 78 python dataframe pandas

说我有以下DataFrame

Letter    Number
A          1
B          2
C          3
D          4

哪个可以通过以下代码获得

import pandas as pd

letters=pd.Series(('A', 'B', 'C', 'D'))
numbers=pd.Series((1, 2, 3, 4))
keys=('Letters', 'Numbers')
df=pd.concat((letters, numbers), axis=1, keys=keys)
Run Code Online (Sandbox Code Playgroud)

现在我想从列Letters中获取值C.

命令行

df[df.Letters=='C'].Letters
Run Code Online (Sandbox Code Playgroud)

将返回

2    C
Name: Letters, dtype: object

我的问题是:我怎么才能得到值C而不是整个两行输出?

非常感谢你.
爱德华多

val*_*n0t 114

df[df.Letters=='C'].Letters.item()
Run Code Online (Sandbox Code Playgroud)

这将返回从该选择返回的Index/Series中的第一个元素.在这种情况下,值始终是第一个元素.

编辑:

或者你可以运行loc()并以这种方式访问​​第一个元素.这个更短,是我过去实现它的方式.

  • 我喜欢这种方法,但是我收到警告:`FutureWarning:“item”已被弃用,并将在未来版本中删除` (6认同)
  • @AlexG:您可以使用它:`df[df.Letters=='C'].Letters.iloc[0]`。它生成结果系列中的第一个元素(也是唯一的)。 (5认同)
  • @AlexG 和 @Sonic Soul :尝试使用 `df[df.Letters=='C'].Letters.squeeze()` 代替。这以同样的方式工作。:) (3认同)

EdC*_*ica 39

使用该values属性将值作为np数组返回,然后使用[0]获取第一个值:

In [4]:
df.loc[df.Letters=='C','Letters'].values[0]

Out[4]:
'C'
Run Code Online (Sandbox Code Playgroud)

编辑

我个人更喜欢使用下标运算符访问列:

df.loc[df['Letters'] == 'C', 'Letters'].values[0]
Run Code Online (Sandbox Code Playgroud)

这避免了列名称可以包含空格或破折号的问题-,这意味着使用..

  • 这确实无关紧要,但在您的选择中,您可以使用点符号访问“字母”列;df.loc[df.Letters=='C']。如果列名称中有空格,您可能应该使用转换器将其删除,就像从 CSV 或 Excel 文件导入一样。 (3认同)