冒号(:)在python中的工作原理&;熊猫?

冒号(:)在python中的工作原理&;熊猫?,python,pandas,Python,Pandas,我创建一个数据帧: import pandas as pd data = pd.DataFrame({'a':range(1,11),'b':['m','f','m','m','m','f','m','f','f','f'],'c':np.random.randn(10)}) 这看起来像: a b c 0 1 m 0.495439 1 2 f 1.444694 2 3 m 0.150637 3 4 m -1.078252 4 5 m

我创建一个数据帧:

import pandas as pd
data = pd.DataFrame({'a':range(1,11),'b':['m','f','m','m','m','f','m','f','f','f'],'c':np.random.randn(10)})
这看起来像:

    a  b         c
0   1  m  0.495439
1   2  f  1.444694
2   3  m  0.150637
3   4  m -1.078252
4   5  m  0.618045
5   6  f -0.525368
6   7  m  0.188912
7   8  f  0.159014
8   9  f  0.536495
9  10  f  0.874598
当我想选择一些行时,我运行

data[:2] or data.ix[2]
但当我尝试时:

se = range(2)
data[se]
有一个错误:

KeyError: 'No column(s) named: [0 1]'
我知道DataFrame选择一个列作为默认值。当我运行
data[se]
时发生了什么?
冒号(:)在python中是如何工作的?

我从未使用过Pandas,但是可以找到python中切片(
[::]
符号)的一个很好的解释

在DataFrame中,[]的内部切片会对行进行切片。这主要是为了方便起见,因为这是一种常见的操作

In [32]: df[:3]
Out[32]: 
                   A         B         C         D
2000-01-01 -0.282863  0.469112 -1.509059 -1.135632
2000-01-02 -0.173215  1.212112  0.119209 -1.044236
2000-01-03 -2.104569 -0.861849 -0.494929  1.071804

In [33]: df[::-1]
Out[33]: 
                   A         B         C         D
2000-01-08 -1.157892 -0.370647 -1.344312  0.844885
2000-01-07  0.577046  0.404705 -1.715002 -1.039268
2000-01-06  0.113648 -0.673690 -1.478427  0.524988
2000-01-05  0.567020 -0.424972  0.276232 -1.087401
2000-01-04 -0.706771  0.721555 -1.039575  0.271860
2000-01-03 -2.104569 -0.861849 -0.494929  1.071804
2000-01-02 -0.173215  1.212112  0.119209 -1.044236
2000-01-01 -0.282863  0.469112 -1.509059 -1.135632
在您的示例中,您使用
范围(2)
[0,1]
作为列表。我认为您需要的是
数据[0:1]
数据帧进行切片,并获得与
数据[:1]
相同的第0行和第1行,省略零。例如,如果您需要第3、4和5行,则为
数据[3:5]

此外,查看手册中的一些示例,您可以使用步骤,因此:

  • 数据[::2]
    每第二行提供一次
  • data[:-1]
    按相反顺序返回所有行
  • 组合范围和步长:
    数据[0:10:2]
    将产生第0、2、4、6、8和10行

希望它能有所帮助,

这种[start:limit:step]语法被称为切片。 您可以使用以下函数轻松创建切片的实例:

类片(停止)

类切片(开始、停止[、步骤])

返回表示由指定的索引集的切片对象 范围(开始、停止、步骤)。开始和步骤参数默认为 无。切片对象具有只读数据属性“开始”、“停止”和“结束” 只返回参数值(或其默认值)的步骤 没有其他明确的功能;但是 数值Python和其他第三方扩展 使用扩展索引语法时也会生成。例如: [start:stop:step]或[start:stop,i]。有关详细信息,请参阅itertools.islice() 返回迭代器的备用版本

在您的情况下,可以编写类似这样的内容来返回前两行

se = slice(None, 2)
data[se]

提供一个列表试图从列中进行选择(您没有名称为0或1的列),同时提供一个类似
:2
的切片来切片行。如果我想选择这些行[2,4,3,5,1],我运行df[slice([2,4,3,5,1]),有一个错误。我只是使用了df.ix[2,4,3,5,1]。有其他方法吗?您需要按顺序排列吗?您只能使用
[]
进行单个范围的排列,并且不能更改顺序,只能跳过行或反转(据我所知)。执行
df[1:5]
应该可以给您所需的行,但不能按您想要的顺序排列……但是,当我执行df[1:2]时我只得到行索引1,而不是1和2。我缺少什么?[至少在其他编程语言中,1:2表示行(或列)1和2。
>>> data.ix[range(2)]
   a  b         c
0  1  m -0.323834
1  2  f  0.159787