如何从熊猫数据框架获取值而不是索引和对象类型

假设我有以下 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)

现在我想从字母列得到值 C。

命令行

df[df.Letters=='C'].Letters

会回来的

2    C
Name: Letters, dtype: object

我怎样才能只得到值 C 而不是整个两行输出?

327317 次浏览
df[df.Letters=='C'].Letters.item()

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

编辑:

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

使用 values属性以 np 数组的形式返回值,然后使用 [0]获取第一个值:

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


Out[4]:
'C'

剪辑

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

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

这样可以避免列名可能有空格或破折号 -的问题,这意味着使用 .进行访问。

import pandas as pd


dataset = pd.read_csv("data.csv")
values = list(x for x in dataset["column name"])


>>> values[0]
'item_0'

编辑:

实际上,您可以像索引任何旧数组一样索引数据集。

import pandas as pd


dataset = pd.read_csv("data.csv")
first_value = dataset["column name"][0]


>>> print(first_value)
'item_0'

可以对索引和列标签使用 loc

df.loc[2, 'Letters']
# 'C'

如果您喜欢“ Numbers”列作为参考,可以将其设置为索引。

df.set_index('Numbers').loc[3, 'Letters']

我发现这个清洁剂,因为它不需要的 [0].item()

我认为一个好的选择是首先将单行 DataFrame 转换为 Series,然后索引它:

df[df.Letters=='C'].squeeze()['Letters']