在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
相关产品推荐
相关产品推荐

