根据列表索引选择Pandas行

niwlg2el  于 2022-11-27  发布在  其他
关注(0)|答案(8)|浏览(150)

我有一个dataframe 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

如何或什么功能可以做到这一点?

isr3a4wc

isr3a4wc1#

.iloc用于基于整数的索引,.loc用于基于标签的索引。请参阅以下示例:

ind_list = [1, 3]
df.iloc[ind_list]
ltskdhd1

ltskdhd12#

您还可以使用iloc:

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

如果由于之前的计算, Dataframe 中的索引与行的顺序不对应,则此方法将不起作用。在这种情况下,请用途:

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

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

uwopmtnx

uwopmtnx3#

另一种方法(虽然是较长的代码)但比上面的代码要快.用%timeit函数检查一下:

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

PS:你弄清楚原因

kcwpcxri

kcwpcxri4#

如果index_list包含所需的索引,则可以通过执行以下操作来获取包含所需行的 Dataframe

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

这是基于截至2021年3月的最新文档。

nafvub8i

nafvub8i5#

对于大型数据集,通过skiprows参数只读取选定的行可以节省内存。

示例

pred = lambda x: x not in [1, 3]
pd.read_csv("data.csv", skiprows=pred, index_col=0, names=...)

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

详细数据

docs
skiprows:列表类、整型或可调用,默认值为None
...
如果是可调用的,则将根据行索引对可调用函数求值,如果应跳过该行,则返回True,否则返回False。lambda x: x in [0, 2]是一个有效的可调用参数示例
这个功能在panda0.20.0+版本中有效。另请参见corresponding issue和相关帖子。

qq24tv8q

qq24tv8q6#

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

index_list = [1,3]

df.take(pos)

#or

df.query('index in @index_list')
dzjeubhm

dzjeubhm7#

你要做的是通过索引过滤 Dataframe ,目前在Pandas中最好的方法是:

单一索引

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

多重索引

desired_index_list = [1,3]
index_level_to_filter = 0
df[df.index.get_level_values(index_level_to_filter).isin(desired_index_list)]
tzxcd3kk

tzxcd3kk8#

若要从筛选的索引取得新的DataFrame:

对于我的问题,我需要从索引中创建一个新的 Dataframe 。我找到了一个直接的方法来实现这一点:

iloc_list=[1,2,4,8]
df_new = df.filter(items = iloc_list , axis=0)

您也可以使用这个来筛选数据行。请参阅documentation以取得详细信息。

相关问题