pd.DataFrame.drop()的互补方法是什么?如何保留指定索引行?
Pandas DataFrame 行筛选相关问题解答
问题1:pd.DataFrame.drop()的互补方法是什么?
pd.DataFrame.drop()的作用是删除指定的行或列,它的互补操作就是保留指定行/列,常用的方法有这几种:
- 直接索引筛选:用
df.loc[目标索引]或者df.iloc[目标位置]直接选取想要保留的行,这是最直观的互补操作。比如你想保留索引为[0,2]的行,直接写df.loc[[0,2]]就好,和用drop删掉这两行完全是反向操作。 - 条件筛选:如果是按列值条件保留行,
df.query()会很方便,比如df.query("Magnitude > 3")就能保留震级大于3的行,这也相当于drop掉不符合条件的行。 - 布尔索引:通过布尔数组来筛选,比如
df[df['Year'] == 2018],只保留2018年的数据,本质也是保留目标行,和drop互补。
问题2:如何删除DataFrame中除指定索引外的所有行?
你现在用df_new = df.drop(df.index[index_value])是删掉index_value指定的行,要反过来保留这些行、删掉其他所有行,有几种简单的实现方式:
方法1:直接选取目标索引(最推荐)
如果index_value是你要保留的实际索引值(比如你的df里的6131、6132这类),直接用loc选取:
# 单个索引值 df_new = df.loc[[index_value]] # 多个索引值(比如保留索引6131和6133) df_new = df.loc[[6131, 6133]]
如果index_value是位置索引(比如0、1、2这种对应行的位置),就用iloc:
# 保留第0行和第2行 df_new = df.iloc[[0, 2]]
方法2:用drop的反向操作
也可以通过drop删掉除目标索引外的所有行,先获取所有索引中不属于index_value的部分,再drop:
# 先得到要删除的索引(所有索引减去目标索引) drop_indices = df.index.difference(index_value) df_new = df.drop(drop_indices)
举个你的df例子,假设你要保留索引6131和6135的行,用方法1的代码就是:
df_new = df.loc[[6131, 6135]]
得到的df_new就只有这两行数据,其他行都被“删除”(其实是筛选保留,效果一致)。
内容的提问来源于stack exchange,提问作者VGB
相关产品推荐
相关产品推荐

