Python 根据列表索引选择行

Python 根据列表索引选择行,python,pandas,Python,Pandas,我有一个数据帧df: 20060930 10.103 NaN 10.103 7.981 20061231 15.915 NaN 15.915 12.686 20070331 3.196 NaN 3.196 2.710 20070630 7.907 NaN 7.907 6.459 然后我想选择列表中显示的具有特定序列号的行,假设这里是[1,3],然后左: 2

我有一个数据帧df:

   20060930  10.103       NaN     10.103   7.981
   20061231  15.915       NaN     15.915  12.686
   20070331   3.196       NaN      3.196   2.710
   20070630   7.907       NaN      7.907   6.459
然后我想选择列表中显示的具有特定序列号的行,假设这里是[1,3],然后左:

   20061231  15.915       NaN     15.915  12.686
   20070630   7.907       NaN      7.907   6.459
如何或什么功能可以做到这一点

ind_list = [1, 3]
df.ix[ind_list]
你应该做这个把戏! 当我使用数据帧进行索引时,我总是使用.ix()方法。它是如此的简单和灵活

更新 这不再是公认的索引方法。
ix
方法已被弃用。使用
.iloc
进行基于整数的索引,使用
.loc
进行基于标签的索引。请参见以下示例:

ind_list = [1, 3]
df.iloc[ind_list]
您还可以使用iloc:

df.iloc[[1,3],:]
如果由于先前的计算,数据帧中的索引与行的顺序不一致,那么这将不起作用。在这种情况下,请使用:

df.index.isin([1,3])

。。。正如其他回答中所建议的那样。

对于大型数据集,通过
skiprows
参数仅读取选定行是内存有效的

示例

pred = lambda x: x not in [1, 3]
pd.read_csv("data.csv", skiprows=pred, index_col=0, names=...)
现在将从跳过除1和3之外的所有行的文件返回数据帧


详细信息

从:

skiprows
:类似列表或整数或可调用,默认值
None

如果可调用,将根据行索引计算可调用函数,如果应跳过该行,则返回True,否则返回False。一个有效的可调用参数示例是[0,2]中的
lambda x:x

此功能适用于0.20.0+版本。另请参见和。

另一种方式(虽然它是一个较长的代码),但它比上述代码快。使用%timeit函数检查它:

df[df.index.isin([1,3])]
附言:你找出原因了吗


解决这个问题的方法有很多,上面列出的是最常用的解决方法。我想再添加两种方法,以防有人正在寻找替代方法

index_list = [1,3]

df.take(pos)

#or

df.query('index in @index_list')

如果
index\u list
包含所需的索引,则可以通过执行以下操作来获取包含所需行的数据帧

index_list = [1,2,3,4,5,6]
df.loc[df.index[index_list]]

这是基于截至2021年3月的最新版本。

现在已弃用。iloc应用于位置索引这对我不起作用,我必须使用
df.iloc[[1,3],:]
更新中的解决方案也不起作用,我有截至2021年3月的最新工作解决方案使用
df.index.get\u level\u值(0).isin
对于多重索引,如果你说的是一个命名索引,那么这是正确的答案:
pd.DataFrame({'num_legs':[2,4,8,0,6,10],'num_wings':[2,0,0,0,0,0,0,0,4,0],'num_sample_seen':[10,2,1,8,3,0],'do_I_like_it':[0,1,1,0,0],[0],[0],'index=['falcon','dog','dog','dog','dog','dog','dog','spider','s'
这是一个很好的答案。这种方法的优点是可以使用df.loc的全部功能。例如,您可以使用df.loc[df.index[index\u list]、“my\u column”]选择所需的列,甚至可以使用df.loc[df.index[index\u list]、“my\u column”]=“my\u value”设置值