Jul*_* He 5 indexing slice dataframe pandas
当使用负索引时,DataFrame.ix()似乎不会切割我想要的DataFrame.
我有一个DataFrame对象,并希望切片最后两行.
In [90]: df = pd.DataFrame(np.random.randn(10, 4))
In [91]: df
Out[91]:
0 1 2 3
0 1.985922 0.664665 -2.800102 1.695480
1 0.580509 0.782473 1.032970 1.559917
2 0.584387 1.798743 0.095950 0.071999
3 1.956221 0.075530 -0.391008 1.692585
4 -0.644979 -1.959265 0.749394 -0.437995
5 -1.204964 0.653912 -1.426602 2.409855
6 1.178886 2.177259 -0.165106 1.145952
7 1.410595 -0.761426 -1.280866 0.609122
8 0.110534 -0.234781 -0.819976 0.252080
9 1.798894 0.553394 -1.358335 1.278704
Run Code Online (Sandbox Code Playgroud)
一种方法:
In [92]: df[-2:]
Out[92]:
0 1 2 3
8 0.110534 -0.234781 -0.819976 0.252080
9 1.798894 0.553394 -1.358335 1.278704
Run Code Online (Sandbox Code Playgroud)
另一种方式:
In [93]: df.ix[len(df)-2:, :]
Out[93]:
0 1 2 3
8 0.110534 -0.234781 -0.819976 0.252080
9 1.798894 0.553394 -1.358335 1.278704
Run Code Online (Sandbox Code Playgroud)
现在我想使用否定索引,但有问题:
In [94]: df.ix[-2:, :]
Out[94]:
0 1 2 3
0 1.985922 0.664665 -2.800102 1.695480
1 0.580509 0.782473 1.032970 1.559917
2 0.584387 1.798743 0.095950 0.071999
3 1.956221 0.075530 -0.391008 1.692585
4 -0.644979 -1.959265 0.749394 -0.437995
5 -1.204964 0.653912 -1.426602 2.409855
6 1.178886 2.177259 -0.165106 1.145952
7 1.410595 -0.761426 -1.280866 0.609122
8 0.110534 -0.234781 -0.819976 0.252080
9 1.798894 0.553394 -1.358335 1.278704
Run Code Online (Sandbox Code Playgroud)
如何正确使用DataFrame.ix()的负索引?谢谢.
这是一个错误:
In [1]: df = pd.DataFrame(np.random.randn(10, 4))
In [2]: df
Out[2]:
0 1 2 3
0 -3.100926 -0.580586 -1.216032 0.425951
1 -0.264271 -1.091915 -0.602675 0.099971
2 -0.846290 1.363663 -0.382874 0.065783
3 -0.099879 -0.679027 -0.708940 0.138728
4 -0.302597 0.753350 -0.112674 -1.253316
5 -0.213237 -0.467802 0.037350 0.369167
6 0.754915 -0.569134 -0.297824 -0.600527
7 0.644742 0.038862 0.216869 0.294149
8 0.101684 0.784329 0.218221 0.965897
9 -1.482837 -1.325625 1.008795 -0.150439
In [3]: df.ix[-2:]
Out[3]:
0 1 2 3
0 -3.100926 -0.580586 -1.216032 0.425951
1 -0.264271 -1.091915 -0.602675 0.099971
2 -0.846290 1.363663 -0.382874 0.065783
3 -0.099879 -0.679027 -0.708940 0.138728
4 -0.302597 0.753350 -0.112674 -1.253316
5 -0.213237 -0.467802 0.037350 0.369167
6 0.754915 -0.569134 -0.297824 -0.600527
7 0.644742 0.038862 0.216869 0.294149
8 0.101684 0.784329 0.218221 0.965897
9 -1.482837 -1.325625 1.008795 -0.150439
Run Code Online (Sandbox Code Playgroud)
https://github.com/pydata/pandas/issues/2600
请注意,这df[-2:]将工作:
In [4]: df[-2:]
Out[4]:
0 1 2 3
8 0.101684 0.784329 0.218221 0.965897
9 -1.482837 -1.325625 1.008795 -0.150439
Run Code Online (Sandbox Code Playgroud)
ix\ 的主要目的是允许像 numpy 一样的索引并支持行和列标签。所以我不确定您的用例是否是预期目的。以下是我能想到的几种方法,大部分都是微不足道的:
In [142]: df.ix[:][-2:]\nOut[142]:\n 0 1 2 3\n8 0.386882 -0.836112 -0.108250 -0.433797\n9 0.642468 -0.399255 -0.911456 -0.497720\n\nIn [161]: df.ix[df.index[-2:],:]\nOut[161]:\n 0 1 2 3\n8 0.386882 -0.836112 -0.108250 -0.433797\n9 0.642468 -0.399255 -0.911456 -0.497720\nRun Code Online (Sandbox Code Playgroud)\n\nix我认为根本不支持负索引。它似乎完全忽略了它:
In [181]: df.ix[-100:,:]\nOut[181]:\n 0 1 2 3\n0 -1.144137 -1.042034 -2.158838 0.674055\n1 -0.424184 1.237318 -1.846130 0.575357\n2 -0.844974 -0.541060 2.197364 -0.031898\n3 0.846263 1.244450 -1.570566 -0.477919\n4 -0.193445 0.171045 -0.235587 -1.185583\n5 1.361539 -1.107389 -1.321081 -0.776407\n6 0.505907 -1.364414 -2.093770 0.144016\n7 -0.888465 -0.329153 0.491264 -0.363472\n8 0.386882 -0.836112 -0.108250 -0.433797\n9 0.642468 -0.399255 -0.911456 -0.497720\nRun Code Online (Sandbox Code Playgroud)\n\n编辑:从pandas 文档中我们有:
\n\n\n\n使用整数轴标签的基于标签的索引是一个棘手的话题。它已在邮件列表和科学 Python 社区的各个成员之间进行了广泛的讨论。在 pandas 中,我们的普遍观点是标签比整数位置更重要。因此,对于整数轴索引,使用 .ix 等标准工具只能进行基于标签的索引。以下代码将产生异常:
\n\nRun Code Online (Sandbox Code Playgroud)\n\ns = Series(range(5))\ns[-1]\ndf = DataFrame(np.random.randn(5, 4))\ndf\ndf.ix[-2:]\n做出这个深思熟虑的决定是为了防止歧义和微妙的错误(许多用户报告在进行 API 更改以阻止基于位置的索引时\xe2\x80\x9c 回退\xe2\x80\x9d 时发现错误)。
\n
| 归档时间: |
|
| 查看次数: |
7373 次 |
| 最近记录: |