Pandas DataFrame 行列数据提取全指南:iloc、loc、iat、at 用法详解

苏见山
苏见山
发布时间:2026-10-14| 3人浏览过
原创

本文详细介绍Pandas中DataFrame的行列数据提取方法,涵盖按行、按列、按位置及按索引的多种操作。重点解析df.iloc()、df.loc()、df.iat()和df.at()函数的具体用法与区别,通过实例演示如何高效获取连续或不连续的数据块,帮助开发者掌握灵活的数据筛选技巧。

Pandas数据提取方法概述

在Pandas中,提取DataFrame数据的方式多样,包括按行(单行、连续多行、非连续多行)、按列(单列、连续多列、非连续多列)、提取部分不连续的行与列、按坐标位置、按字符索引以及按数据块(list)等方式。主要涉及的函数有df.iloc()、df.loc()、df.iat()、df.at()以及已逐渐弃用的df.ix()。

DataFrame构建与索引基础

构建DataFrame时,需明确指定columns和index,并可在此基础上修改或添加数据,进而提取行列索引信息。


data = {'省份': ['北京', '上海', '广州', '深圳'],
        '年份': ['2017', '2018', '2019', '2020'],
        '总人数': ['2200', '1900', '2170', '1890'],
        '高考人数': ['6.3', '5.9', '6.0', '5.2']}
df = pd.DataFrame(data, columns=['省份', '年份', '总人数', '高考人数', '高数'],
                  index=['one', 'two', 'three', 'four'])
df['高数'] = ['90', '95', '92', '98']
print("行索引:{}".format(list(df.index)))
print("列索引:{}".format(list(df.columns)))
print(df.index[1:3])
print(df.columns[1])
print(df.columns[1:3])
print(df)

示例数据中,行索引为['one', 'two', 'three', 'four'],列索引为['省份', '年份', '总人数', '高考人数', '高数']。提取部分行索引可得Index(['two', 'three'], dtype='object'),提取特定列索引如'年份'可得Index(['年份', '总人数'], dtype='object')。完整数据表如下: 省份 年份 总人数 高考人数 高数 one 北京 2017 2200 6.3 90 two 上海 2018 1900 5.9 95 three 广州 2019 2170 6.0 92 four 深圳 2020 1890 5.2 98

按列索引提取数据的注意事项

需要注意的是,df.iloc()不支持通过[:, [1:3]]这种切片方式直接获取连续列数据。若需按位置获取连续列,必须先通过df.columns[1:4]获取列索引列表,再基于该索引提取数据。


print(df['省份'])  #按列名取列
print(df.省份)  #按列名取列
print(df[['省份', '总人数']])  #按列名取不连续列数据
print(df[df.columns[1:4]])  #按列索引取连续列数据
print(df.iloc[:, 1])  #按位置取列
print(df.iloc[:, [1, 3]])  #按位置取不连续列数据

以下是按列名或列索引提取数据的示例结果: 提取单列'省份': one 北京 two 上海 three 广州 four 深圳 Name: 省份, dtype: object 提取多列'省份'和'总人数': 省份 总人数 one 北京 2200 two 上海 1900 three 广州 2170 four 深圳 1890 提取连续列'年份'、'总人数'、'高考人数': 年份 总人数 高考人数 one 2017 2200 6.3 two 2018 1900 5.9 three 2019 2170 6.0 four 2020 1890 5.2 提取单列'年份': one 2017 two 2018 three 2019 four 2020 Name: 年份, dtype: object 提取非连续列'年份'和'高考人数': 年份 高考人数 one 2017 6.3 two 2018 5.9 three 2019 6.0 four 2020 5.2

使用iloc按位置提取数据

使用df.iloc[](传入数字)可提取行数据。当需要提取部分行和部分列时,参数顺序应先指定行,再指定列。此外,还可以结合条件语句进行数据筛选。


print(df[1:3])  #按行取数据,这行代码结果没在下面输出
print(df[df.高数>90])  #按行有条件的取数据,结果没输出
print(df.iloc[1])  #按行取行数据
print(df.iloc[1, 3])  #按坐标取
print(df.iloc[[1], [3]])  #按坐标取
print(df.loc[df.index[1:3]])  #按行索引取行,但没必要
print(df.iloc[1:3])  #按行取连续数据
print(df.iloc[[1, 3]])  按行取不连续数据
print(df.iloc[[1,2,3], [2,4]])  取部分行部分列数据

以下是按位置提取数据的示例结果: 提取单行'two': 省份 上海 年份 2018 总人数 1900 高考人数 5.9 高数 95 Name: two, dtype: object 提取单个元素: 5.9 提取单列'高考人数': 高考人数 two 5.9 提取多行'two'和'three': 省份 年份 总人数 高考人数 高数 two 上海 2018 1900 5.9 95 three 广州 2019 2170 6.0 92 提取多行'two'和'four': 省份 年份 总人数 高考人数 高数 two 上海 2018 1900 5.9 95 four 深圳 2020 1890 5.2 98 提取部分行和部分列('总人数'和'高数'): 总人数 高数 two 1900 95 three 2170 92 four 1890 98

使用loc按字符索引提取数据

使用df.loc[](传入字符索引)可提取行数据,适用于基于标签的索引操作。


print(df.loc['two'])
print(df.loc['two', '省份'])
print(df.loc['two':'three'])
print(df.loc[['one', 'three']])
print(df.loc[['one', 'three'], ['省份', '年份']])

以下是按字符索引提取数据的示例结果: 提取单行'two': 省份 上海 年份 2018 总人数 1900 高考人数 5.9 高数 95 Name: two, dtype: object 提取单个元素: 上海 提取多行'two'到'three': 省份 年份 总人数 高考人数 高数 two 上海 2018 1900 5.9 95 three 广州 2019 2170 6.0 92 提取多行'one'和'three': 省份 年份 总人数 高考人数 高数 one 北京 2017 2200 6.3 90 three 广州 2019 2170 6.0 92 提取多行和多列('省份'和'年份'): 省份 年份 one 北京 2017 three 广州 2019

其他提取方法(ix, iat, at)简介

df.ix、df.iat和df.at也可用于提取行列数据,但这些方法使用频率较低。在实际开发中,推荐优先使用上述df.iloc()和df.loc()方法,它们功能更强大且兼容性更好。


print(df.ix[1:3])
print(df.ix[:, [1, 3]])
print(df.iat[1,3])
print(df.at['two', '省份'])

以下是其他提取方式的示例结果: 提取多行'two'和'three': 省份 年份 总人数 高考人数 高数 two 上海 2018 1900 5.9 95 three 广州 2019 2170 6.0 92 提取单列'年份'和'高考人数': 年份 高考人数 one 2017 6.3 two 2018 5.9 three 2019 6.0 four 2020 5.2 提取单个元素: 5.9 提取单个元素: 上海

本文介绍了Pandas中读取行列数据的多种方法。如需了解更多相关内容,建议查阅本站过往文章或继续浏览后续教程,感谢支持!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。