如何在pandas DataFrame中根据EMP ID查询对应的Name Emp字段值
问题原因
- 你写的
emp_name= df['EMP ID']==id_no得到的是仅包含True/False的布尔序列,不是筛选后的DataFrame结果,无法直接用来提取姓名字段 - 带空格的列名
Name Emp不能直接以变量形式写在方括号内,必须用引号包裹,否则Python会将其识别为未定义的变量抛出报错 - 如果你之前用
df.query失败,大概率是没有处理带空格的列名、也没有正确引用外部变量导致的
正确实现方式
方式1:基础布尔索引(最常用)
id_no = 2 # 先用布尔序列筛选匹配行,再提取Name EMP列,iloc[0]取第一个匹配结果(EMP ID唯一时可直接用) emp_name = df[df['EMP ID'] == id_no]['Name EMP'].iloc[0] print(emp_name)
运行后输出:Paul
方式2:df.query 写法
带空格的列名需要用反引号包裹,引用外部变量要加@`前缀:
id_no = 2 emp_name = df.query("`EMP ID` == @id_no")['Name EMP'].iloc[0] print(emp_name)
方式3:索引查询(高频查询场景更高效)
如果需要频繁根据EMP ID查询,可提前将EMP ID设为索引,后续查询效率更高:
# 仅需执行一次索引设置 df = df.set_index('EMP ID') # 后续直接用loc查询 id_no = 2 emp_name = df.loc[id_no, 'Name EMP'] print(emp_name)
内容的提问来源于stack exchange,提问作者Andrew D
相关产品推荐
相关产品推荐

