【问题标题】:Why is my data except for the first column converting to NaN?为什么除了第一列之外的数据都转换为 NaN?
【发布时间】:2018-02-16 10:20:48
【问题描述】:

我尝试了各种代码变体,包括尝试 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

我实际上是在使用这个基本代码来修复这个错误。我正在为标准普尔 500 指数在线提取数据。

我认为错误是在连接过程中发生的,但我不确定如何解决。如果您打印出prices_list,则数据是包含所有数字的数据框列表,因此来源没有问题。

【问题讨论】:

标签: python-3.x stocks


【解决方案1】:

我认为问题在于您的每个 DataFrames 都有一个包含 Symbol 名称的 MultiIndex,因此当您尝试合并数据时,会发生以下情况(我使用了两个非常小的示例 DataFrames 来说明) :

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

由于 Symbol 已经表示为列名,您可以简单地从各个 DataFrames 的索引中删除此级别,然后您应该能够按预期合并:

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

【讨论】:

    猜你喜欢
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 2011-11-24
    • 2011-03-29
    相关资源
    最近更新 更多