如何修改DataFrame列名?YFinance爬取股票数据列名优化问题
解决方法
方案一:修改爬取函数,直接设置Series名称
在Scrapping函数里,返回收盘价Series时把它的名称改成对应股票代码,后续合并时就会自动用股票代码当列名:
def Scrapping(symbol): aapl = yf.Ticker(symbol) ainfo = aapl.history(period='1y') global castex_date castex_date = ainfo.index # 给收盘价Series设置股票代码作为名称 close_series = ainfo.Close close_series.name = symbol return close_series all = {'AAPL', 'TSLA', 'MSFT'} all_Assets = list(map(Scrapping, all)) # 合并成DataFrame,列名直接就是股票代码 df = pd.DataFrame(all_Assets).T
嫌麻烦的话可以用rename一步到位:
def Scrapping(symbol): aapl = yf.Ticker(symbol) ainfo = aapl.history(period='1y') global castex_date castex_date = ainfo.index return ainfo.Close.rename(symbol)
方案二:合并时指定列名
不想改爬取函数的话,合并成DataFrame的时候直接用股票代码指定列名就行:
import pandas as pd all = {'AAPL', 'TSLA', 'MSFT'} all_Assets = list(map(Scrapping, all)) # 把集合转成列表,和爬取结果一一对应(集合无序,要固定顺序就把all改成列表) stock_codes = list(all) # 方法1:通过索引设置后转置 df = pd.DataFrame(all_Assets, index=stock_codes).T # 方法2:用字典构造DataFrame,自动匹配列名 df = pd.DataFrame(dict(zip(stock_codes, all_Assets)))
提醒:集合是无序的,如果需要列的顺序和你预想的一致,建议把
all定义成列表,比如all = ['AAPL', 'TSLA', 'MSFT']。
内容的提问来源于stack exchange,提问作者Marc Kch
相关产品推荐
相关产品推荐

