如何使用iloc提取DataFrame指定行以生成独立的新DataFrame
Pandas提取指定行生成新DataFrame的解决方法
最优写法(无需循环)
pandas的iloc索引器原生支持直接传入行索引序列(元组、列表、numpy数组均可),一行代码即可生成独立的新DataFrame:
# 加.copy()是为了生成完全独立的新对象,避免后续修改新表影响原表 new_df = df.iloc[row_ind].copy()
运行后得到的new_df结构如下:
| Col1 | Col2 | Col3 | |
|---|---|---|---|
| 0 | red | blue | yellow |
| 2 | five | six | seven |
如果需要重置新表的行索引为连续的0、1,可以加reset_index方法:
new_df = df.iloc[row_ind].copy().reset_index(drop=True)
基于现有循环逻辑的修改方案
原有代码存在两个问题:
- 循环范围错误:用
range(len(df))会出现超出row_ind长度的索引越界问题 - 没有存储每次取出的行,仅保留了最后一次的取值结果
修改后的循环代码如下:
import pandas as pd # 初始化空列表存储每一行数据 row_collection = [] for idx in row_ind: current_row = df.iloc[idx] row_collection.append(current_row) # 转换为DataFrame,如需保留原索引可以去掉reset_index部分 new_df = pd.DataFrame(row_collection).reset_index(drop=True)
内容的提问来源于stack exchange,提问作者user16470918
相关产品推荐
相关产品推荐

