根据列表索引选择Pandas行

时间:2013-10-03 09:36:32

标签: 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],然后是左:

   20061231  15.915       NaN     15.915  12.686
   20070630   7.907       NaN      7.907   6.459

如何或以何种方式可以做到这一点?

6 个答案:

答案 0 :(得分:102)

List = [1, 3]
df.ix[List]

应该做的伎俩! 当我使用数据框索引时,我总是使用.ix()方法。它更容易,更灵活......

<强>更新 这不再是可接受的索引方法。不推荐使用ix方法。使用.iloc进行基于整数的索引,使用.loc进行基于标签的索引。

答案 1 :(得分:50)

你也可以使用iloc:

df.iloc[[1,3],:]

答案 2 :(得分:11)

另一种方式(尽管它是更长的代码),但是比上面的代码更快。使用%timeit函数进行检查:

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

PS:您找出原因

enter image description here

答案 3 :(得分:6)

如果 index_list 包含您想要的索引,您可以通过执行获得具有所需行的数据框

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

这是基于截至 2021 年 3 月的最新 documentation

答案 4 :(得分:2)

对于大型数据集,通过type MyType = { thing: string }; function aFunc(action: MyType){ console.log('in aFunc', action.thing);} ; function another(callback: () => string) { console.log('in another', callback());}; function theMethod(theArg: ?MyType) { if (!theArg) return; aFunc(theArg); // flow doesn't complain about this console.log('in theMethod', theArg.thing); // Now flow knows thing isn't null const {thing} = theArg another(() => thing); } 参数仅读取选定的行具有存储效率。

示例

skiprows

现在,这将从文件中返回一个DataFrame,该文件将跳过除1和3之外的所有行。


详细信息

来自docs

  

pred = lambda x: x not in [1, 3] pd.read_csv("data.csv", skiprows=pred, index_col=0, names=...) :类似列表或整数或可调用,默认为skiprows

     

...

     

如果可调用,则将针对行索引评估可调用函数,如果应跳过该行,则返回True,否则返回False。有效的可调用参数的示例为None

此功能在pandas 0.20.0+版本中有效。另请参见corresponding issuerelated post

答案 5 :(得分:0)

有很多方法可以解决此问题,而上面列出的方法是实现该解决方案的最常用方法。我想再添加两种方法,以防万一有人在寻找替代方法。

index_list = [1,3]

df.take(pos)

#or

df.query('index in @index_list')