为什么我的数据除了第一列转换为NAN



我尝试了各种代码变体,包括尝试reset_index((,因为也许有一个多索引引起了错误。如果您看到下面的打印件,您会注意到"符号"索引。我不确定如何删除它以及是否会解决错误。

    tickers = ['AAPL', 'BAC']
    prices_list = []
    for ticker in tickers:
        try:
            prices = dr.DataReader(ticker,'morningstar','01/01/2017')['Close']
            prices = pd.DataFrame(prices)
            prices.columns = [ticker]
            prices_list.append(prices)
        except:
            pass
    prices_df = pd.concat(prices_list,axis=1,copy=False)
    #prices_df.sort_index(inplace=True)
    print(prices_df.head())

结果--->

                     AAPL  BAC
Symbol Date
AAPL   2017-01-02  115.82  NaN
       2017-01-03  116.15  NaN
       2017-01-04  116.02  NaN
       2017-01-05  116.61  NaN
       2017-01-06  117.91  NaN

我实际上使用此基本代码来解决此错误。我正在网上获取S& p 500的数据。

我认为该错误在串联期间发生,但我不确定如何解决。如果您打印出prices_list_list数据是包含所有数字的数据范围列表,因此源源不是问题。

我相信问题是您的每个数据范围都有一个包含符号名称的多索引,因此当您尝试合并数据时,类似以下情况(我使用过(两个非常小的示例数据框(:

df1
                     AAPL
Symbol Date              
AAPL   2017-01-02  115.82
       2017-01-03  116.15
df2
                  BAC
Symbol Date              
BAC    2017-01-02  123.82
       2017-01-03  124.15

尝试合并此数据会导致以下内容:

prices_df = pd.concat([df1, df2],axis=1,copy=False)
                     AAPL     BAC
Symbol Date                      
AAPL   2017-01-02  115.82     NaN
       2017-01-03  116.15     NaN
BAC    2017-01-02     NaN  123.82
       2017-01-03     NaN  124.15

由于符号已经表示为列名称,因此您可以简单地从单个数据范围的索引中删除此级别,然后您应该能够按预期合并:

df1.index = df1.index.droplevel(0)
              AAPL
Date              
2017-01-02  115.82
2017-01-03  116.15
df2.index = df2.index.droplevel(0)
               BAC
Date              
2017-01-02  123.82
2017-01-03  124.15
prices_df = pd.concat([df1, df2],axis=1,copy=False)
              AAPL     BAC
Date                      
2017-01-02  115.82  123.82
2017-01-03  116.15  124.15

相关内容

  • 没有找到相关文章

最新更新