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


104

说我有以下DataFrame

字母编号
A 1
B 2
C 3
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℃
名称:字母,dtype:对象

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


6
无关紧要的是,有一种更好的方式来构造您的DataFrame:pd.DataFrame({'Letters': letters, 'Numbers': numbers})
JoeCondron 2015年

Answers:


144
df[df.Letters=='C'].Letters.item()

这将返回从该选择返回的索引/系列中的第一个元素。在这种情况下,该值始终是第一个元素。

编辑:

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


2
我喜欢这种方法,但是我得到了警告:FutureWarning: "item" has been deprecated and will be removed in a future version
AlexG

2
@AlexG:您可以改用:df[df.Letters=='C'].Letters.iloc[0]。它在结果系列中产生第一个元素(也是唯一的)。
Anh-Thi DINH

使用loc [:1]仍在值旁边显示index :(
Sonic Soul

@AlexG和@Sonic Soul:尝试df[df.Letters=='C'].Letters.squeeze()改用。这以相同的方式工作。:)
user78910

52

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

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

Out[4]:
'C'

编辑

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

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

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


1
我个人不使用.来访问列,因为如果列名以数字值开头或列名中有非字母字符(例如空格),那么这将永远无法使用,因此我总是更喜欢df['col_name']
EdChum

我懂了。这就是为什么在我到处看的地方,我总会发现df['col_name']符号而不是.符号。再次感谢。
Eduardo

1
这确实无关紧要,但是在您选择时,您会使用点符号访问“字母”列;df.loc [df.Letters =='C']。如果列名中有空格,则可能应该使用转换器将其删除,就像从CSV或Excel文件导入时一样。
valkn0t 2015年

@ thomas-ato我将更新答案,但我不同意将列作为附加步骤进行修改,除非有必要,在这种情况下,我同意这没有什么不同
EdChum 2015年

1
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'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.