Pandas DataFrame使用df.at访问时报KeyError问题求助
问题描述
我从Excel文件读取了一个DataFrame,想要获取指定列的值、应用规则后更新它。尝试执行以下代码:
ticker='BTCUSDT' print(df.at[ticker,'Position']) # 之后想更新这个值: df.at[ticker,'Position']=1
执行时出现KeyError: 'BTCUSDT'错误,预期是打印出0,赋值后单元格值变为1。
但如果先执行赋值操作:
ticker='BTCUSDT' df.at['BTCUSDT','Position']=0 # 之后操作就正常了: ticker='BTCUSDT' df.at[ticker,'Position'] df.at[ticker,'Position']=1
后续操作能正常运行,请问哪里操作出错了?
原因与解决方法
核心问题:你的DataFrame索引里根本没有
BTCUSDT这个值。- 直接用
df.at[ticker,'Position']读取时,因为找不到对应的索引键,所以触发KeyError。 - 先执行赋值时,Pandas会自动把
BTCUSDT添加到索引中,同时创建对应Position列的单元格,后续操作自然能找到这个索引,所以不会报错。
- 直接用
具体解决步骤:
- 先检查当前DataFrame的索引,执行
print(df.index),看看里面有没有BTCUSDT。 - 根据检查结果处理:
- 如果Excel里本来就有
BTCUSDT的行,但读取时没把对应列设为索引:
重新读取时指定索引列:
或者读取后设置索引:df = pd.read_excel('你的文件路径.xlsx', index_col='存放ticker的列名')df = df.set_index('存放ticker的列名') - 如果
BTCUSDT是你要新增的行:
可以先初始化该行数据再操作,比如用df.loc[ticker] = {'Position': 0}来创建整行,之后再进行读取和更新。
- 如果Excel里本来就有
- 先检查当前DataFrame的索引,执行
内容的提问来源于stack exchange,提问作者BGM
相关产品推荐
相关产品推荐

