冒号(:) 在python 和pandas 中是如何工作的?

Pen*_* He 3 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)})
Run Code Online (Sandbox Code Playgroud)

哪个看起来像?

    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
Run Code Online (Sandbox Code Playgroud)

当我想选择一些行时,我运行

data[:2] or data.ix[2]
Run Code Online (Sandbox Code Playgroud)

但是当我尝试:

se = range(2)
data[se]
Run Code Online (Sandbox Code Playgroud)

有一个错误:

KeyError: 'No column(s) named: [0 1]'
Run Code Online (Sandbox Code Playgroud)

我知道 DataFrame 选择一个 col 作为默认值。运行时发生了什么data[se]?冒号(:) 在python 中是如何工作的?

urb*_*ban 5

我从未使用过 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
Run Code Online (Sandbox Code Playgroud)

在您使用的示例中,range(2)它为您[0, 1]提供了列表。我认为您需要的是data[0:1]切片DataFrame并获取第 0 行和第 1 行,这与data[:1]省略零相同。例如,如果您想要第 3,4 和 5 行,那就是data[3:5].

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

  • data[::2] 给你每第二行
  • data[::-1] 以相反的顺序返回所有行
  • 组合范围和步长:data[0:10:2]将导致第 0、2、4、6、8 和 10 行

希望能帮助到你