说我有以下数据框:
tmp = np.random.randn(10,4)
df = pd.DataFrame(tmp, index=pd.date_range('1/1/2012', periods=tmp.shape[0]),
columns=['A', 'B', 'C', 'D'])
> b
A B C D
2012-01-01 0.471846 1.130041 -0.614117 0.882738
2012-01-02 -1.431566 0.680617 -0.615331 0.288740
2012-01-03 0.398567 -0.115388 -0.869855 -1.273666
2012-01-04 0.379501 0.192329 -1.942184 0.694004
2012-01-05 1.306329 -0.803856 0.417033 -0.655907
2012-01-06 -0.599877 0.696549 -0.252789 1.367977
2012-01-07 -1.618916 0.216571 -0.499880 0.386853
2012-01-08 0.415002 0.139775 0.251842 0.021379
2012-01-09 2.536787 0.737672 -0.740485 -0.890189
2012-01-10 -1.553530 -0.100950 -0.237478 -0.295612
我该怎么做:
例如,假设我想索引位置[1,2]
中的子数据帧(以numpy“matricial”表示法)。输出应为:
C
2012-01-02 -0.615331
我尝试了以下三种方法,但它们都没有工作::
df[1,2]
df[1][2]
df.take([1])[2]
唯一有效的方法似乎是:
df.ix[1,2]
df.irow(1)[2]
但是:
使用.ix
进行位置索引是危险的,因为如果我的索引是整数(与上面的情况相反的日期),它将默认为标签索引。在此处详细了解:Start:stop slicing inconsistencies between numpy and Pandas?。
使用irow
非常麻烦,因为它需要从()
表示法转换为[]
表示法(irow
返回Series
个对象)
例如,假设我想在(numpy matricial notation)中对位置[1:3,2:3]
中的元素进行索引。输出应为:
B
2012-01-02 -0.615331
2012-01-03 -0.869855
请注意,我排除 停止索引(即我坚持使用numpy表示法)。
有什么想法吗?
答案 0 :(得分:2)
这个经常被要求的功能将很快到位 https://github.com/pydata/pandas/pull/2922 如果你想用它测试,你可以把它从分支上拉下来
答案 1 :(得分:2)
这是一种解决方法(直到提交的功能请求@Jeff提交):
In [178]: df = pd.DataFrame(tmp, index=pd.date_range('2012-1-1', periods=tmp.shape[0]), columns='A B C D'.split())
In [179]: df.ix[df.index[1], df.columns[2]]
Out[179]: -0.3021434106214243
In [180]: df.ix[df.index[1:3], df.columns[2:3]]
Out[180]:
C
2012-01-02 -0.302143
2012-01-03 -1.430387
这表明即使使用混洗整数索引,语法的工作方式也相同:
In [206]: df2 = df.reset_index(drop=True)
In [207]: index = range(10)
In [208]: import random
In [209]: random.shuffle(index)
In [210]: df2.index = index
In [212]: df2.ix[df2.index[1], df2.columns[2]]
Out[212]: -0.3021434106214243
In [213]: df2.ix[df2.index[1:3], df2.columns[2:3]]
Out[213]:
C
7 -0.302143
2 -1.430387
答案 2 :(得分:0)
来自pandas文档:
Pandas提供了一套方法,以获得纯粹基于整数的索引。语义紧跟python和numpy切片。这些是基于0的索引。切片时,包括起始边界,而排除上限。尝试使用非整数,甚至是有效标签都会引发IndexError。
.iloc属性是主要访问方法。以下是有效的输入:
整数,例如五 整数列表或数组[4,3,0] 具有整数1:7的切片对象