为什么df [[2,3,4]] [2:4]有效且df [[2:4]] [2:4]不适用于Python

时间:2016-10-19 12:25:54

标签: python pandas dataframe subset

假设我们有一个数据框

import pandas as pd
df = pd.read_csv('...')
df
  0 1 2 3 4
0 1 2 3 4 5
1 1 2 3 4 5
2 1 2 3 4 5
3 1 2 3 4 5
4 1 2 3 4 5

为什么一种方法有效,其他方法返回语法错误?

2 个答案:

答案 0 :(得分:1)

我认为你需要ix

print (df.ix[2:4,2:4])
   2  3
2  3  4
3  3  4
4  3  4

答案 1 :(得分:1)

失败是因为2:4是访问df的键/列的无效语法:

In [73]:
df[[2:4]]
  File "<ipython-input-73-f0f09617b349>", line 1
    df[[2:4]]
         ^
SyntaxError: invalid syntax

如果你定义了一个dict并尝试了相同的语法,这没有什么不同:

In [74]:
d = {0:0,1:1,2:2,3:3,4:4,5:5}
d

Out[74]:
{0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5}

In [76]:
d[[2:4]]

  File "<ipython-input-76-ea5d68adc389>", line 1
    d[[2:4]]
        ^
SyntaxError: invalid syntax

[]语法用于访问匹配的列标签,您不能在列表中传递切片来访问像这样的列范围,它需要是一个值列表,因为您已经已找到

ilocixloc等新方法支持切片范围

什么对您有用,最初使用列表中的标签选择列:

In [77]:
df[[2,3,4]]

Out[77]:
   2  3  4
0  3  4  5
1  3  4  5
2  3  4  5
3  3  4  5
4  3  4  5

然后通过切片选择行:

In [79]:
df[[2,3,4]][2:4]

Out[79]:
   2  3  4
2  3  4  5
3  3  4  5