我很好奇为什么df[2]不被支持,而df。Ix[2]和df[2:3]都可以工作。

In [26]: df.ix[2]
Out[26]: 
A    1.027680
B    1.514210
C   -1.466963
D   -0.162339
Name: 2000-01-03 00:00:00

In [27]: df[2:3]
Out[27]: 
                  A        B         C         D
2000-01-03  1.02768  1.51421 -1.466963 -0.162339

我希望df[2]与df[2:3]的工作方式相同,与Python索引约定一致。是否有设计原因不支持按单个整数索引行?


当前回答

您可以查看源代码。

DataFrame有一个私有函数_slice()来对DataFrame进行切片,它允许参数轴决定对哪个轴进行切片。DataFrame的__getitem__()在调用_slice()时不设置轴。因此,_slice()通过默认轴0对其进行切片。

你可以做一个简单的实验,这可能会对你有帮助:

print df._slice(slice(0, 2))
print df._slice(slice(0, 2), 0)
print df._slice(slice(0, 2), 1)

其他回答

我通常会选择。loc/。iloc,但也可以通过转置DataFrame来选择一行。保持在上面的例子中,df。t[2]是df的第二行。

你可以像这样循环数据帧。

for ad in range(1,dataframe_c.size):
    print(dataframe_c.values[ad])

@HYRY,详见0.11的新文档

http://pandas.pydata.org/pandas-docs/stable/indexing.html

这里我们有了新的操作符,.iloc到显式只支持整数索引,.loc到显式只支持标签索引

例如,想象一下这个场景

In [1]: df = pd.DataFrame(np.random.rand(5,2),index=range(0,10,2),columns=list('AB'))

In [2]: df
Out[2]: 
          A         B
0  1.068932 -0.794307
2 -0.470056  1.192211
4 -0.284561  0.756029
6  1.037563 -0.267820
8 -0.538478 -0.800654

In [5]: df.iloc[[2]]
Out[5]: 
          A         B
4 -0.284561  0.756029

In [6]: df.loc[[2]]
Out[6]: 
          A         B
2 -0.470056  1.192211

[]只对行进行切片(根据标签位置)

您可以查看源代码。

DataFrame有一个私有函数_slice()来对DataFrame进行切片,它允许参数轴决定对哪个轴进行切片。DataFrame的__getitem__()在调用_slice()时不设置轴。因此,_slice()通过默认轴0对其进行切片。

你可以做一个简单的实验,这可能会对你有帮助:

print df._slice(slice(0, 2))
print df._slice(slice(0, 2), 0)
print df._slice(slice(0, 2), 1)

要基于索引访问pandas表,还可以考虑使用numpy。as_array选项将表转换为Numpy数组

np_df = df.as_matrix()

然后

np_df[i] 

是可行的。