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

索引数据帧:整数行、命名列

胡墨竹
2023-03-14

假设df是一个数据帧。

  • df.loc[]只接受名字
  • df.iloc[]只接受整数(实际放置)
  • df.ix[]接受名称和整数:

当引用行时,df.ix[row_idx,]只希望获得名称。例如

df = pd.DataFrame({'a' : ['one', 'two', 'three','four', 'five', 'six'],
                   '1' : np.arange(6)})
df = df.ix[2:6]
print(df)

   1      a
2  2  three
3  3   four
4  4   five
5  5    six

df.ix[0, 'a']

抛出一个错误,它不会返回“2”。

当引用列时,iloc更喜欢整数,而不是名称。例如

df.ix[2, 1]

返回“三”,而不是2。(尽管df.idx[2,'1']返回2)。

奇怪的是,我喜欢完全相反的功能。通常我的列名非常有意义,所以在我的代码中我直接引用它们。但是由于大量的观察清理,我的熊猫数据帧中的行名称通常不对应于范围(len(df))

我意识到我可以使用:

df.iloc[0].loc['a'] # returns three

但似乎很难看!有人知道更好的方法来做这件事吗,这样代码就会像这样?

df.foo[0, 'a'] # returns three

事实上,是否有可能将我自己的新方法添加到pandas.core.frame.DataFrame中,所以例如,df.idx(row)实际上是df.iloc。loc]?

共有3个答案

方权
2023-03-14

我们可以重置索引,然后像这样使用基于0的索引

df.reset_index(删除=True). loc[0,'a']

编辑:从列名称索引'a'中删除[],因此它只输出值

佟高澹
2023-03-14

现有的答案在我看来是短视的。

>

  • df.loc[df.index[0],'a']
    这里的策略是获取第0行的行标签,然后正常使用. loc。我看到两个问题。

    1. 如果df有重复的行标签,df.loc[df.index[0],'a']可以返回多行。

    df.reset_index. loc[0,'a']
    这里的策略是重置索引,使行标签变为0,1,2,...因此. loc[0]给出了与. iloc[0].不过,这里的问题是运行时,因为. loc. iloc慢,您将为重置索引产生成本。

    我建议遵循@Landmaster的评论:

    df.iloc[0, df.columns.get_loc("a")]
    

    本质上,这与df.iloc[0,0]相同,只是我们使用df.columns.get_loc("a")动态获取列索引。

    要索引多个列,如['a','b','c'],请使用:

    df.iloc[0, [df.columns.get_loc(c) for c in ['a', 'b', 'c']]]
    

    这是我关于熊猫课程的一部分。

  • 秦安宁
    2023-03-14

    这是一个迟来的答案,但@unutbu的评论仍然有效,是解决这个问题的一个很好的方法

    要使用整型行和命名列(标记列)索引数据帧,请执行以下操作:

    df.loc[df.index[#],'NAME']其中#是有效的整数索引,NAME是列的名称。

     类似资料:
    • 我有两个形状相同的python数据帧,例如: 我想使用df2中的值作为行索引来选择df1中的值,并创建一个形状相等的新数据帧。预期结果: 我已尝试使用.loc,它在单个列中运行良好: 但是我不能同时在所有列上使用. loc或. iloc。我想避免循环来优化性能,因为我正在处理一个大数据帧。有什么想法吗?

    • 我想将以下数据框的第1列重命名为“Ref”。我有很多列,因此无法重命名每个列或为每个列设置名称。 这是数据帧 现在我想将第一列重命名为'Ref'。我试过这个 它重命名所有标题与列[1]相似的列。

    • 问题内容: 例如,假设一个简单的数据框 给定条件,如何检索行的索引值?例如: return ,但是我想得到的只是just 。这在以后的代码中给我带来麻烦。 基于某些条件,我想记录满足该条件的索引,然后在它们之间选择行。 我试过了 获得所需的输出 但我明白了 问题答案: 添加起来更容易-使用一个元素选择list的第一个值: 但是,如果某些值不匹配,则会出现错误,因为第一个值不存在。 解决方案是使用与

    • 我有一个数据框,我正在使用TIA来填充彭博社的数据。当我看着df。索引我看到我打算成为列的数据以多索引的形式呈现给我。df的输出。列是这样的: 索引([u'column1','u'column2']) 我尝试过各种reset_index的迭代,但都无法补救这种情况。 1) TIA管理器如何使数据帧列作为索引读入? 2) 如何正确地将这些列标识为列而不是多索引? 我试图解决的最终问题是,当我尝试将此

    • 以下脚本: Floor1正在正确执行,Floor2使用相同的df执行,但使用重命名的列则不正确。我得到一个关键错误: 我知道,有一个类似的问题:重命名列后get keyerror 但我并没有真正得到答案,更重要的是,我没有找到解决办法。

    • 我得到了一个具有多个列和行的数据帧df1。简单的例子: 我想创建一个空的数据框df2,然后再添加新的列和计算结果。 此时,我的代码如下所示: …添加两个新列: 有没有更好/更安全/更快的方法?是否可以创建一个空数据帧df2,并且只从df1复制索引?