我创建了一个DataFrame:
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选择col作为默认值。当我运行data[se]
时发生了什么?
冒号(:)如何在python中运行?
答案 0 :(得分:4)
我从未使用过Pandas,但是可以找到切片的一个很好的解释([::]
符号在python中here。现在我从manual
使用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
在您使用range(2)
的示例中,[0, 1]
为列表。我认为您需要data[0:1]
来对DataFrame
进行切片,并获得与省略零的data[:1]
相同的行0和1。如果你想要例如第3,4和5行data[3:5]
。
此外,查看手册中的一些示例,您可以使用步骤,因此:
data[::2]
为您提供第2行data[::-1]
以相反的顺序返回所有行data[0:10:2]
将产生行0,2,4,6,8和10 希望有所帮助
答案 1 :(得分:2)
[start:limit:step]语法称为切片。 您可以使用slice()函数轻松创建切片实例:
类切片(停止)
类切片(开始,停止[,步骤])
返回表示由指定的索引集的切片对象 范围(开始,停止,步骤)。 start和step参数默认为 没有。切片对象具有只读数据属性start,stop和 仅返回参数值(或其默认值)的步骤。他们 没有其他明确的功能;但它们被用于 数值Python和其他第三方扩展。切片对象是 在使用扩展索引语法时也会生成。例如: a [开始:停止:步骤]或[开始:停止,我]。请参阅itertools.islice()获取 返回迭代器的备用版本。
在你的情况下,你可以写这样的东西来返回前两行
se = slice(None, 2)
data[se]
答案 2 :(得分:1)
>>> data.ix[range(2)]
a b c
0 1 m -0.323834
1 2 f 0.159787