Как поместить цены на акции из файла csv в один фрейм данных

#python #pandas #dataframe #csv #yahoo-finance

#python #pandas #фрейм данных #csv #yahoo-финансы

Вопрос:

Итак, я собираю данные из S amp; P 500 из файла csv. Мой вопрос в том, как мне создать один большой фрейм данных, содержащий 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:

Ответ зависит от структуры фреймов данных, которые создает ваш текущий код. Поскольку код зависит от некоторых файлов на вашем локальном диске, мы не можем запускать его так сложно, чтобы быть конкретными здесь. В общем, есть много вариантов, среди наиболее распространенных, я бы сказал, являются

  1. Поместите dfs в список и используйте pandas.concat(..., axis=1) в этом списке для объединения столбцов dfs по столбцам, смотрите Здесь
  2. Объедините ( merge или join ) ваш dfs в столбец даты, который, как я полагаю, есть у каждого df, смотрите Здесь

Комментарии:

1. я внес некоторые изменения выше, и я добавил ссылку на CSV. Я пытался использовать concat, даже с axis= 1, хотя я все еще сталкиваюсь с проблемой, что фрейм данных не будет отображаться как один с отдельными столбцами.