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

如何在Pandas中为股票数据的Adjusted Close创建便捷调用变量?

解决方法

因为Adjusted Close(实际Yahoo财经返回的列名是'Adj Close')包含空格,没法直接用.运算符访问(.只支持无空格、符合变量命名规则的列名),给你三种实现类似df.Close便捷调用的方式:

方法1:直接用字符串索引赋值变量

这是最直接省事的方式,逻辑和df.Close完全一致,只是把点访问换成字符串索引:

import datetime as dt
import pandas_datareader.data as pdr

end = dt.datetime.now()
start = end - dt.timedelta(weeks=104)
stocks_list = ['COST', 'NIO', 'AMD']
df = pdr.get_data_yahoo(stocks_list, start, end)

# 把'Adj Close'列赋值给变量
AdjClose = df['Adj Close']
AdjClose.head()

方法2:重命名列,实现点运算符访问

如果就想彻底用.来访问,可以把带空格的列名改成无空格的名称(比如AdjClose):

import datetime as dt
import pandas_datareader.data as pdr

end = dt.datetime.now()
start = end - dt.timedelta(weeks=104)
stocks_list = ['COST', 'NIO', 'AMD']
df = pdr.get_data_yahoo(stocks_list, start, end)

# 处理多层列索引,把第一层的空格去掉
df.columns = df.columns.map(lambda x: x[0].replace(' ', '') if isinstance(x, tuple) else x.replace(' ', ''), level=0)
# 现在就能直接用df.AdjClose访问了
AdjClose = df.AdjClose
AdjClose.head()

注:如果是单层列索引的DataFrame,直接用df.columns = df.columns.str.replace(' ', '')就行。

方法3:给DataFrame添加自定义属性

手动给df对象加一个属性,指向'Adj Close'列,之后就能像调用df.Close一样用df.AdjClose访问:

import datetime as dt
import pandas_datareader.data as pdr

end = dt.datetime.now()
start = end - dt.timedelta(weeks=104)
stocks_list = ['COST', 'NIO', 'AMD']
df = pdr.get_data_yahoo(stocks_list, start, end)

# 添加自定义属性
df.AdjClose = df['Adj Close']
# 之后直接调用即可
AdjClose = df.AdjClose
AdjClose.head()

注:属性名别和DataFrame自带的方法/属性重名(比如别叫head、sum这类)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:20:50