如何对pandas DataFrame切片以获取指定坐标位置的子集数据
Pandas DataFrame按坐标位置切片方法
Pandas 中按整数位置提取DataFrame子集统一使用iloc索引器,语法规则为df.iloc[行切片范围, 列切片范围],切片遵循左闭右开规则,不需要指定列名或索引名,直接传入坐标位置即可。
示例代码
首先给出测试用DataFrame:
import pandas as pd df = pd.DataFrame([ [16, 3, 2, 13], [5, 10, 11, 8], [9, 6, 7, 12], [4, 15, 14, 1] ])
如果需要输出嵌套列表格式的结果,在切片后调用.values.tolist()方法即可。
各区域切片实现
- 左上角2×2区域
# 取前2行、前2列 top_left = df.iloc[:2, :2].values.tolist() # 输出:[[16, 3], [5, 10]] - 右上角2×2区域
# 取前2行、后2列 top_right = df.iloc[:2, -2:].values.tolist() # 输出:[[2, 13], [11, 8]] - 左下角2×2区域
# 取后2行、前2列 bottom_left = df.iloc[-2:, :2].values.tolist() # 输出:[[9, 6], [4, 15]] - 右下角2×2区域
# 取后2行、后2列 bottom_right = df.iloc[-2:, -2:].values.tolist() # 输出:[[7, 12], [14, 1]] - 中间2×2区域
注:原问题期望的中间2×2输出存在笔误,按给出的测试df实际运行结果如下:# 取行索引1~3(共2行)、列索引1~3(共2列) center = df.iloc[1:3, 1:3].values.tolist() # 输出:[[10, 11], [6, 7]]
通用切片公式
如果要从坐标(x, y)(x为起始行位置,y为起始列位置,从0开始计数)提取m行n列的子集,通用写法为:
sub_df = df.iloc[x : x+m, y : y+n]
内容的提问来源于stack exchange,提问作者ccpizza
相关产品推荐
相关产品推荐

