如何高效访问DataFrame中的指定行列范围元素块?
Pandas快速提取DataFrame元素块的方案
嵌套for循环逐元素提取完全浪费了Pandas的向量运算优势,必然速度极慢。直接用iloc或loc就能高效完成需求,具体用法如下:
1. 基于位置索引:iloc
如果你的行/列是按默认的0开始整数位置计数:
- 提取行100到200(包含两端)、列100到200的块,注意Python切片左闭右开的特性,结束索引要+1:
subset_df = df.iloc[100:201, 100:201]
如果你的行/列是从1开始计数(类似Excel编号逻辑),对应位置索引要减1:
subset_df = df.iloc[99:200, 99:200]
2. 基于标签索引:loc
如果你的DataFrame行/列有自定义标签(比如字符串、非连续数字),用loc更直接,它的切片是两端都包含的:
- 假设行标签和列标签都是1到1000,提取目标块:
subset_df = df.loc[100:200, 100:200]
这两种方法都是直接操作DataFrame的底层数据块,运算效率远高于循环逐元素处理,1000×1000规模的DataFrame能瞬间完成提取。
内容的提问来源于stack exchange,提问作者Joseph Timm
相关产品推荐
相关产品推荐

