当前位置: 首页 > 知识库问答 >
问题:

如何通过位置或标签从数据帧的单元格中获取值?

弘浩瀚
2023-03-14

我读了“如何从数据帧的单元格中获取值?”以及“如何选择数据框的最后一列”。我有点困惑,什么是2018年接受的方法从熊猫数据帧的单元格获取值,因为get_value已被弃用,并且在上的留档有点稀疏。我想按标签选择行,按位置/整数选择列。下面我使用iloc的方法是2018年公认的方法吗?我有这个代码:

import pandas as pd
import random
import string
import csv
import io

## Make a table with random column labels and rows in random order.
s = '\n'.join((
    ## Separate columns by comma.
    ','.join((
        ## Join letters without a separator.
        ''.join((
            ## Randomly choose 3 characters for the labels from ascii_letters.
            random.choice(
                string.ascii_letters) for i in range(3))) for j in range(3))),
    ## Insert a header to distinguish rows with identical index keys x and y.
    '"Header I, II and III"',
    ## Randomly shuffle the rows under the first header.
    '\n'.join(random.sample(('x,0,1', 'y,2,3',), 2)),
    ## Insert a header to distinguish rows with identical index keys x and y.
    '"Header IV, V and VI"',
    ## Randomly shuffle the rows under the second header.
    '\n'.join(random.sample(('x,4,5', 'y,6,7'), 2)),
    ))

def preprocess(s):
    header = ''
    for l in csv.reader(io.StringIO(s)):
        if len(l) == 1:
            header = l[0]
            continue
        ## Append the header to distinguish identical labels x and y.
        l[0] = header + '; ' + l[0]
        yield l

print(s, end='\n\n')
## Preprocess the string to avoid duplicate row index keys x and y.
df = pd.DataFrame(preprocess(s))
print(df, end='\n\n')
## Set the index to be that of the first column.
df = df.set_index(0)
## First select the column by index using iloc
## and then select the relevant row by index label.
value = df.iloc[:,-1]['Header I, II and III; x']
print(value)

它生成一个字符串s如下所示:

YuT,Uva,AsE
"Header I, II and III"
y,2,3
x,0,1
"Header IV, V and VI"
y,6,7
x,4,5

通过函数preprocess将其转换为数据帧,如下所示:

                         0    1    2
0                    ; YuT  Uva  AsE
1  Header I, II and III; y    2    3
2  Header I, II and III; x    0    1
3   Header IV, V and VI; y    6    7
4   Header IV, V and VI; x    4    5

它是行的最后一列的值(整数1),标签为Header I, II和III; x,我对此感兴趣。这是2018年的正确做法吗?

value = df.iloc[:,-1]['Header I, II and III; x']

我刚刚读了一些非常有趣的问题“Loc vs. iloc vs. ix vs. at vs. iat?”从2015年2月和"熊猫iloc vs ix vs loc解释?"从2015年7月开始。如果我能做这样的事就太好了,但是我不能:

value = df.at['Header I, II and III; x', -1]
value = df['Header I, II and III; x'][-1]

共有2个答案

龙晟睿
2023-03-14

此解决方案肯定有效:

value = df.at['Header I, II and III; x', df.columns[-1]]

对于像我这样喜欢老式词典的人,如果数据帧不包含重复的行标签,也可以执行以下操作,这会阻止转置工作:

d = df.transpose().to_dict('list')
value = d['Header I, II and III; x'][-1]
朱炜
2023-03-14

第一件事是第一件事ix已被弃用,但ix允许您混合使用标签和索引器,并对传递的内容进行了大量猜测。

在今天的时代(当前的稳定版本是v0.22),ix被弃用了,所以坚持使用显式的标签或基于位置的索引器:loc用于基于标签的切片,iloc用于基于索引的切片切片;at用于基于标签的项访问,iat用于基于索引的项访问。

如果您知道标签是什么,请使用at访问单个项目-

df.at['Header I, II and III; x', df.columns[-1]]

如果您知道位置,请使用iat-

df.iat[2, -1]

通常,当您想要访问单个元素时,请使用*at,当您想要访问行/列切片时,请使用*loc

 类似资料:
  • 我构建了一个条件,从我的数据框中提取一行: 现在我想从特定列中获取一个值: 但结果,我得到了一个包含一行和一列(即一个单元格)的数据帧。这不是我需要的。我需要一个值(一个浮点数)。我怎样才能在熊猫身上做到这一点?

  • 完全修改,请重新阅读 你好,我使用的主题显示页面的标题,而不是面包屑中的菜单标签。我试图让面包屑显示相关的菜单标签,如果它是可用的,如果不是,则默认为page_title。 我想出了一些我认为接近的代码。第4行///$ menu _ items = WP _ get _ nav _ menu _ items($ slug);返回null,它应该返回包含当前文章的$slug的导航项。显然,有些事情我

  • 问题内容: 我构造了一个条件,可以从我的数据帧中准确提取一行: 现在,我想从特定列中获取一个值: 但是结果是我得到了一个包含一行和一列( 即 一个单元格)的数据框。这不是我所需要的。我需要一个值(一个浮点数)。我该怎么做在熊猫里? 问题答案: 如果您的DataFrame仅包含一行,则使用,作为Series访问第一行(唯一),然后使用列名访问值:

  • 问题内容: 我想从RichTextArea获取光标位置或位置。我不知道如何在没有任何鼠标事件的情况下获取当前光标位置。例如,TextArea具有方法getCursorPos(),但是RichTextArea没有诸如TextArea这样的方法。有人知道吗 请帮我… 提前致谢… 问题答案: 如果要在RichTextArea中的光标位置插入某些内容,可以使用格式化程序来完成: 要使用JavaScript

  • 我在R中有一个数据帧,我想根据两个列表中的行和列的特定匹配来设置值。 以下是我必须遵循的流程。我有一个数据框,如下所示 我有一个函数,它将列名作为输入,并返回一个与该列名关联的值。例如:一些_函数(“test.var1.t1”)可能返回10的值。 我有一些行名和列名的列表。我需要检查列表中的每个行名称和列名,将它们匹配在一起,计算匹配列的函数,并将值发布到相应的单元格中的数据框中。例如 行名称列表

  • 我对spark数据帧的分区数量有疑问。 如果我有包含列(姓名、年龄、id、位置)的Hive表(雇员)。 如果雇员表有10个不同的位置。因此,在HDFS中将数据划分为10个分区。 如果我通过读取 Hive 表(员工)的整个数据来创建 Spark 数据帧(df)。 Spark 将为数据帧 (df) 创建多少个分区? df.rdd.partitions.size = ??