问题:根据列表索引选择熊猫行
我有一个数据框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
如何或什么功能可以做到这一点?
回答 0
List = [1, 3]
df.ix[List]
应该做的把戏!当我用数据帧建立索引时,我总是使用.ix()方法。它是如此容易和灵活…
UPDATE
这不再是可接受的索引编制方法。该ix
方法已弃用。使用.iloc
基于整数索引和.loc
基于标签索引。
回答 1
您还可以使用iloc:
df.iloc[[1,3],:]
如果由于先前的计算,如果数据框中的索引与行的顺序不对应,则此方法将无效。在这种情况下,请使用:
df.index.isin([1,3])
…如其他回应所建议。
回答 2
回答 3
对于大型数据集,通过skiprows
参数仅读取选定的行会节省内存。
例
pred = lambda x: x not in [1, 3]
pd.read_csv("data.csv", skiprows=pred, index_col=0, names=...)
现在,这将从文件中返回一个DataFrame,该文件将跳过除1和3之外的所有行。
细节
从文档:
skiprows
:类似于列表或整数或可调用的列表,默认None
…
如果可调用,则将针对行索引评估可调用函数,如果应跳过该行,则返回True,否则返回False。有效的可调用参数的一个示例是
lambda x: x in [0, 2]