【发布时间】:2021-11-08 20:11:01
【问题描述】:
我已经使用 Python 包yfinance 为 500 家公司中的每一家下载了价值一年的标准普尔 500 股票数据(确保只保留开盘价):
import pandas as pd
import yfinance as yf
import numpy as np
source=pd.read_html('https://en.wikipedia.org/wiki/List_of_S%26P_500_companies')
df = pd.DataFrame(source[0])
tickers_symbols=df['Symbol'].values.tolist()
GICS_sectors = df['GICS Sector'].values.tolist()
data = pd.DataFrame()
for t,s in zip(tickers_symbols, GICS_sectors):
tmp = yf.download(t, period='1y', progress=False)
tmp.reset_index(inplace=True)
tmp['Ticker'] = t
tmp['GICS'] = s
data = data.append(tmp, ignore_index=True)
##KEEP ONLY OPENING PRICE##
data=data.drop(["Close", "High", "Low", "Adj Close", "Volume"], axis=1)
现在,我需要根据每个公司的 GICS 部门将这个大型数据集分类为更小的数据集。为了做到这一点,我将元组GICS 和dataset 包含在dict 对象中(如建议的here,这样我就可以通过简单地输入dataset_list['GICS sector'] 来调用每个较小的数据集。
dataset_list = dict(tuple(data.groupby('GICS')))
print(dataset_list)
##SPLIT DATASET BY GICS SECTOR AND REMOVE GICS COLUMN##
for sector, dataset in dataset_list.items():
long_dataset=data.drop(columns='GICS', axis=1)
但是,我在执行后续步骤时遇到了问题。实际上,当我运行一个循环将每个数据集从长转换为宽并将其保存为 .csv 文件时,它正确地创建了 11 个文件(与数据集一样多),但 每个文件中的数据正是一样的。
##CONVERT EACH DATASET FROM LONG TO WIDE##
for sector, dataset in dataset_list.items():
final_datasets=long_dataset.pivot_table(index="Date", columns="Ticker", values="Open")
final_datasets.to_csv(str(sector)+' DataFrame.csv', index=True, sep=',')
我认为我写的循环有问题,但我不知道如何解决它。上面的每个循环都应该修改dataset_list 对象中的所有数据集,即我应该能够检索数据帧final_datasets['GICS sector'],但只生成一个数据帧。
非常感谢任何帮助。
【问题讨论】:
标签: python dataframe loops dictionary