Pandas如何通过列值匹配行、按列名获取DataFrame单元格值
实现方法
你之前的写法运行失败,核心原因是loc的行筛选参数默认匹配行索引标签,你的样例DataFrame行索引是0-3的整数,不存在值为Omar Mullins的行标签,自然无法定位到目标行。
不需要依赖原始行号,按name列的值匹配取对应grade有两种常用方案:
- 方案1:布尔索引筛选(无需修改原表结构,适配绝大多数场景)
传入列值匹配的布尔条件筛选目标行,再指定要提取的grade列即可:
如果确认# 返回包含目标值的DataFrame格式结果 ddf = df.loc[df['name'] == 'Omar Mullins', ['grade']] print(ddf)name列无重复值,想直接拿到95这个标量,可以追加位置索引取值:# 直接返回整数类型的成绩值95 target_grade = df.loc[df['name'] == 'Omar Mullins', 'grade'].iloc[0] print(target_grade) - 方案2:将
name列设置为行索引(适合频繁按姓名查询的场景)
先把name列转为行索引,之后就可以直接用你之前尝试的loc语法按姓名取数:# 生成以姓名为行索引的DataFrame df_indexed_by_name = df.set_index('name') # 直接按姓名标签取对应grade ddf = df_indexed_by_name.loc[['Omar Mullins'], ['grade']] print(ddf)
提示:如果
name列存在重名记录,上述两种方法都会返回所有匹配姓名的grade结果,使用前请根据实际业务场景确认列值唯一性,或提前做去重处理。
内容的提问来源于stack exchange,提问作者Ahmed Nabil
相关产品推荐
相关产品推荐

