如何从 Pandas DataFrame 中获取值而不是索引和对象类型
Posted
技术标签:
【中文标题】如何从 Pandas DataFrame 中获取值而不是索引和对象类型【英文标题】:How to get a value from a Pandas DataFrame and not the index and object type 【发布时间】:2015-08-27 13:38:23 【问题描述】:假设我有以下 DataFrame
字母编号 1 乙二 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)
现在我想从 Letters 列中获取值 C。
命令行
df[df.Letters=='C'].Letters
会回来
2℃ 名称:字母,数据类型:对象我怎样才能只得到值 C 而不是整个两行输出?
【问题讨论】:
在不相关的说明中,有一个更好的方法来构建您的 DataFrame:pd.DataFrame('Letters': letters, 'Numbers': numbers)
【参考方案1】:
df[df.Letters=='C'].Letters.item()
这将返回从该选择返回的索引/系列中的第一个元素。在这种情况下,该值始终是第一个元素。
编辑:
或者您可以运行 loc() 并以这种方式访问第一个元素。这更短,是我过去实现它的方式。
Pandas Index doc Pandas Series doc【讨论】:
我喜欢这种方法,但是我收到了警告:FutureWarning: "item" has been deprecated and will be removed in a future version
@AlexG:你可以改用这个:df[df.Letters=='C'].Letters.iloc[0]
。它产生结果系列中的第一个元素(也是唯一的)。
使用 loc[:1] 仍然在值旁边显示索引:(
@AlexG 和@Sonic Soul:尝试改用df[df.Letters=='C'].Letters.squeeze()
。这以同样的方式工作。 :)【参考方案2】:
使用values
属性将值作为np数组返回,然后使用[0]
获取第一个值:
In [4]:
df.loc[df.Letters=='C','Letters'].values[0]
Out[4]:
'C'
编辑
我个人更喜欢使用下标运算符访问列:
df.loc[df['Letters'] == 'C', 'Letters'].values[0]
这避免了列名可以包含空格或破折号-
的问题,这意味着使用.
进行访问。
【讨论】:
这确实无关紧要,但在您的选择中,您使用点符号访问“字母”列; df.loc[df.Letters=='C']。如果您的列名中有空格,您可能应该使用转换器将其删除,就像从 CSV 或 Excel 文件导入一样。 @thomas-ato 我会更新我的答案,但我不同意将列修改为附加步骤,除非这是必要的,在这种情况下,我同意没有区别 @EdChum.. 在这种情况下:我们如何处理错误:“IndexError: index 0 is out of bounds for axis 0 with size 0”【参考方案3】: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'
【讨论】:
【参考方案4】:您可以将loc
与索引和列标签一起使用。
df.loc[2, 'Letters']
# 'C'
如果您更喜欢“数字”列作为参考,可以将其设置为索引。
df.set_index('Numbers').loc[3, 'Letters']
我发现这个清洁器不需要[0]
或.item()
。
【讨论】:
这并没有解决特定问题。如果索引未知,您的代码将无济于事。 第二个版本(将一列设置为索引)确实适用于这种情况。 :)以上是关于如何从 Pandas DataFrame 中获取值而不是索引和对象类型的主要内容,如果未能解决你的问题,请参考以下文章
有啥方法可以扩展包含列表的 pandas Dataframe 中的列并从列表值本身中获取列名?
Pandas:如何从给定(行,列)对列表的 DataFrame 中检索值?
如何在 Pandas DataFrame 中一次获取多列的值计数?
如何从 print() 编写的字符串中获取 Python pandas DataFrame?
pandas获取dataframe中索引值最小值所在的数据行(get dataframe row of min index value)