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

