首页 > 解决方案 > 如何将 csv 文件中的股票价格放入一个数据框中

问题描述

所以我正在从一个 csv 文件中收集标准普尔 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

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

标签: pythonpandasdataframecsvyahoo-finance

解决方案


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

  1. 将 dfs 放入一个列表并pandas.concat(..., axis=1)在该列表上使用以逐列连接 dfs,请参见此处
  2. 在我假设每个 df 具有的 Date 列上合并(merge或)您的 dfs,请参见此处join

推荐阅读