假设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.DataFrame
s,例如。
df.idx(rows, cols)
实际上是df.iloc[rows].loc[cols]
?
这是一个迟来的答复,但是@unutbu的评论仍然有效,是解决这个问题的一个很好的办法。
要使用整数行和命名列(标记列)索引数据帧,请执行以下操作:
df.loc[df.index[#], 'NAME']
,其中#
是有效的整数索引,NAME
是列的名称。要按行/列标签获取或设置} 而不是^{} ,因为它是。。。
DataFrame
中的单个值,最好使用^{其他人已经展示了,如果您从行的整数位置开始,您仍然必须首先找到行标签,
DataFrame.index
,因为DataFrame.at
只接受标签:完整性:
^{} 用于按整数位置访问行/列对的单个值。
我们可以重置索引,然后像这样使用基于0的索引
df.reset_index(drop=True).loc[0,'a']
编辑:从列名称索引中删除了
[]
,因此它只输出值相关问题 更多 >
编程相关推荐