索引Pandas数据帧:整数行,命名列

2024-05-20 00:04:46 发布

您现在位置:Python中文网/ 问答频道 /正文

假设df是pandas数据帧。

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

当引用行时,df.ix[row_idx, ]只希望被赋予名称。e、 g

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优先使用整数,而不是名称。e、 g

df.ix[2, 1]

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

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

我知道我可以用:

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

但看起来很难看!有没有人知道更好的方法,这样代码就会像这样?

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

事实上,是否可以在我自己的新方法上添加到pandas.core.frame.DataFrames,例如。 df.idx(rows, cols)实际上是df.iloc[rows].loc[cols]


Tags: 数据代码名称pandasdf整数locreturns
3条回答

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

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

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

要按行/列标签获取或设置DataFrame中的单个值,最好使用^{}而不是^{},因为它是。。。

  1. 更快
  2. 您更明确地表示只想访问一个值。

其他人已经展示了,如果您从行的整数位置开始,您仍然必须首先找到行标签,DataFrame.index,因为DataFrame.at只接受标签:

df.at[df.index[0], 'a']
# Out: 'three'

完整性:

^{}用于按整数位置访问行/列对的单个值。

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

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

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

相关问题 更多 >