首页 > 解决方案 > 如何进行远程数据访问(来自股票市场)并将它们组合成一个数据框?

问题描述

我尝试从晨星获取数据并组合不同的股票,但我无法弄清楚如何正确组合数据。我想按日期组织它,但它只是将数据堆叠在一起。

print('test')
print('testing')
#this program will read data from morningstar and interpret them using pandas

import pandas as pd
import datetime

import numpy as np
import matplotlib.pylab as plt

pd.core.common.is_list_like = pd.api.types.is_list_like

import pandas_datareader.data as web

start = datetime.datetime(2010,1,1) #datetime is (year, month, day)
end = datetime.date.today()

#Getting data from morningstar
microsoft = pd.DataFrame(web.DataReader("MSFT", "morningstar", start, end))
apple = pd.DataFrame(web.DataReader("AAPL","morningstar", start, end))
google = pd.DataFrame(web.DataReader("GOOG", "morningstar", start, end))


stocks = pd.DataFrame({"MSFT": microsoft["Volume"],
                   "AAPL": apple["Volume"],
                  "GOOG": google["Volume"]})


print(stocks)

基本上我希望数据看起来像这样:

          stock1          stock2        stock3

date1       123            345           234

date2       657            294           553

date3       786            321           933

但结果却是这样:

           stock1         stock2        stock3

date1       123            NaN           NaN

date2       657            NaN           NaN

date3       786            NaN           NaN

date1       NaN            345           NaN

date2       NaN            294           NaN

date3       NaN            321           NaN

date1       NaN            NaN           234

date2       NaN            NaN           553

date3       NaN            NaN           933

标签: pythonpandasdataframematplotlibjoin

解决方案


您可以reset_index在创建新数据框时在最后添加

stocks = pd.DataFrame({"MSFT": microsoft["Volume"].reset_index(level=0,drop=True),
                   "AAPL": apple["Volume"].reset_index(level=0,drop=True),
                  "GOOG": google["Volume"].reset_index(level=0,drop=True)})

推荐阅读