You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Pandas DataFrame中选取指定单元格的方法咨询

在Pandas DataFrame中按姓名选取/修改指定单元格

你尝试用df.at按姓名修改单元格时触发pandas.errors.InvalidIndexError,核心原因是df.at仅支持通过单个行标签+列标签访问标量,而布尔索引不符合它的参数要求。以下是几种可行的解决方案:

方法1:用df.loc直接处理布尔索引(最便捷)

df.loc支持布尔数组筛选行,搭配列名就能精准定位并修改目标单元格,适合单次操作:

import pandas as pd
import numpy as np

exam_data  = {'name': ['Anastasia', 'Dima', 'Katherine', 'James', 'Emily', 'Michael', 'Matthew', 'Laura', 'Kevin', 'Jonas'],
        'score': [12.5, 9, 16.5, np.nan, 9, 20, 14.5, np.nan, 8, 19],
        'attempts': [1, 3, 2, 3, 2, 3, 1, 1, 2, 1],
        'qualify': ['yes', 'no', 'yes', 'no', 'no', 'yes', 'yes', 'no', 'no', 'yes'],
        'state' : ['calf', 'ny', 'ver', 'colo', 'wshg', 'calf', 'calf', 'ny', 'calf', 'ny']}
labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
df = pd.DataFrame(exam_data, index=labels)

# 用loc修改Emily的score
df.loc[df['name'] == 'Emily', 'score'] = 10

方法2:先获取行标签再用df.at(适合坚持用at的场景)

如果确定姓名唯一,先筛选出目标行的索引标签,再传入df.at:

# 获取Emily对应的行索引
emily_idx = df[df['name'] == 'Emily'].index[0]
# 用at修改
df.at[emily_idx, 'score'] = 10

方法3:将name设为索引(适合大数据频繁查询场景)

若需要频繁按姓名操作,把name列设为DataFrame的索引,之后用df.at会更高效:

# 把name设为索引
df.set_index('name', inplace=True)
# 直接通过姓名访问修改
df.at['Emily', 'score'] = 10

内容的提问来源于stack exchange,提问作者fond bcn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:22:49