如何通过行号与列标题在Pandas DataFrame中高效取值?
结合行号与列标题在Pandas DataFrame中取值的最简方法
嘿,这个场景我日常用Pandas的时候经常碰到!要同时用**行号(位置索引)和列标题(标签索引)**获取值,其实有几个简洁又实用的方法,我结合示例给你讲清楚:
首先先搭个示例DataFrame方便演示:
import pandas as pd data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'City': ['NYC', 'LA', 'Chicago']} df = pd.DataFrame(data)
方法1:最直观的链式写法(仅取值推荐)
直接先用iloc定位行号,再通过列标题取值:
# 获取第1行(行号从0开始)的'Age'列值 df.iloc[1]['Age'] # 输出:30
这个写法最简洁易懂,但要注意:如果后续要对这个位置赋值,可能会触发SettingWithCopyWarning——因为链式索引返回的可能是原DataFrame的视图而非副本,所以仅用来取值的话完全没问题。
方法2:安全稳妥的loc结合索引转换(赋值/取值都适用)
通过df.index[row_num]把行号转换成对应的行标签,再用loc结合列标题定位:
# 同样获取第1行的'Age'列值 df.loc[df.index[1], 'Age'] # 输出:30
这个方法完全符合Pandas的标签定位逻辑,不会有链式索引的隐患,不管是取值还是后续修改值都很安全,也是我个人日常用得最多的写法之一。
方法3:单元素快速访问的at方法
如果只是针对单个元素的取值/赋值,at方法效率更高,语法也简洁:
df.at[df.index[1], 'Age'] # 输出:30
at是Pandas专门为单个元素访问优化的方法,比loc在单元素操作上更快,适合频繁的单值访问场景。
总结
- 仅需取值时:
df.iloc[row_num][col_name]最简洁直观; - 需要兼顾赋值安全或更规范的写法:
df.loc[df.index[row_num], col_name]或df.at[df.index[row_num], col_name]更稳妥。
内容的提问来源于stack exchange,提问作者Daniel Slätt
相关产品推荐
相关产品推荐

