如何将股票价格从csv文件放入一个单个数据帧

问题描述

因此,我正在从csv文件中收集来自S&P 500的数据。我的问题是如何创建一个包含500列并包含所有价格的大型数据框。该代码当前为:

import pandas as pd
import pandas_datareader as web
import datetime as dt
from datetime import date
import numpy as np


def get_data():
    start = dt.datetime(2020,5,30)
    end = dt.datetime.Now()
    csv_file = pd.read_csv(os.path.expanduser("/Users/benitocano/Downloads/copyOfSandP500.csv"),delimiter = ',')
    tickers = pd.read_csv("/Users/benitocano/Downloads/copyOfSandP500.csv",delimiter=',',names = ['Symbol','Name','Sector'])
    for i in tickers['Symbol'][:5]:
        df = web.DataReader(i,'yahoo',start,end)
        df.drop(['High','Low','Open','Close','Volume'],axis=1,inplace=True)
get_data()

因此,如代码现在所显示的,它只是要创建500个单独的数据帧,所以我想问如何将其变成一个大数据帧。谢谢! 编辑: CSV文件链接为: https://datahub.io/core/s-and-p-500-companies

我已经尝试了以上代码

for stock in data:     
    series = pd.Series(stock['Adj Close'])
    df = pd.DataFrame()
    df[ticker] = series
print(df)

尽管输出只有一列,如下所示:

                  ADM
Date                 
2020-06-01  38.574604
2020-06-02  39.348278
2020-06-03  40.181465
2020-06-04  40.806358
2020-06-05  42.175167
...               ...
2020-11-05  47.910000
2020-11-06  48.270000
2020-11-09  49.290001
2020-11-10  50.150002
2020-11-11  50.090000

为什么只打印一列,而不打印其余列?

解决方法

答案取决于您当前代码生成的数据帧的结构。由于代码取决于本地驱动器上的某些文件,因此我们无法在此处如此具体地运行它。总的来说,有很多选择,我最常说的是

  1. 将dfs放入列表中,并在该列表上使用pandas.concat(...,axis=1)逐列连接dfs,请参见here
  2. 我假定每个df具有的日期列上的df合并(mergejoin),请参见here