Python 根据列表索引选择行
我有一个数据帧df: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
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”设置值