Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按索引在表中选择行的多个部分_Python_Pandas_Slice - Fatal编程技术网

Python 按索引在表中选择行的多个部分

Python 按索引在表中选择行的多个部分,python,pandas,slice,Python,Pandas,Slice,我有一个带有GPS路径和一些属性的大数据帧。我需要分析路径的几个部分。我只想将这些部分子集到一个新的数据帧中。我可以一次对一个部分进行子集划分,但我的想法是将它们全部包含在一起,并创建一个原始索引 问题类似于: import pandas as pd df = pd.DataFrame({'A':[0,1,2,3,4,5,6,7,8,9],'B':['a','b','c','d','e','f','g','h','i','j']}, index=range(

我有一个带有GPS路径和一些属性的大数据帧。我需要分析路径的几个部分。我只想将这些部分子集到一个新的数据帧中。我可以一次对一个部分进行子集划分,但我的想法是将它们全部包含在一起,并创建一个原始索引

问题类似于:

import pandas as pd 
df = pd.DataFrame({'A':[0,1,2,3,4,5,6,7,8,9],'B':['a','b','c','d','e','f','g','h','i','j']},
                  index=range(10,20,))
我想得到这样的东西:

cdf = df.loc[[11:13] & [17:20]] # SyntaxError: invalid syntax
预期结果:

    A  B
11  1  b
12  2  c
13  3  d
17  7  h
18  8  i
19  9  j

我知道使用
cdf=df.loc[[11,12,13,17,18,19],:]这个例子很简单,但是在最初的问题中,我已经删除了数千行和一些条目,因此列表点不是一个选项。

一个可能的解决方案是:

另一种具有
范围的解决方案

cdf = df.ix[list(range(11,14)) + list(range(17,20))]
print (cdf)
    A  B
11  1  b
12  2  c
13  3  d
17  7  h
18  8  i
19  9  j
您可以使用来连接切片:

In [16]: df.loc[np.r_[11:13, 17:20]]
Out[16]: 
    A  B
11  1  b
12  2  c
17  7  h
18  8  i
19  9  j
然而,请注意
df.loc[A:B]
通过
B
选择包含
B
的标签
A
np.r\u[A:B]
返回
A
B
的数组,其中
B
被排除。要包含
B
,您需要使用
np.r\A:B+1]

当传递一个切片时,例如
df.loc[a:B]
df.loc
忽略不在
df.index
中的标签。相反,当传递一个数组时,例如
df.loc[np.r\A:B]
df.loc
可能会为数组中不在
df.index
中的每个值添加一个用NaN填充的新行

因此,为了产生所需的结果,您需要调整切片的右端点,并使用
isin
测试
df.index
中的成员资格:

In [26]: df.loc[df.index.isin(np.r_[11:14, 17:21])]
Out[26]: 
    A  B
11  1  b
12  2  c
13  3  d
17  7  h
18  8  i
19  9  j

谢谢,有趣的解决方案
In [26]: df.loc[df.index.isin(np.r_[11:14, 17:21])]
Out[26]: 
    A  B
11  1  b
12  2  c
13  3  d
17  7  h
18  8  i
19  9  j