Python Pandas 数据框格式索引问题

Mar*_*abu 3 python pandas

范围索引错误:

使用两个数据源尝试获取数据,quandl 和 x 源(数据获取不是问题,但将其用于逻辑会引发错误)对于 quandl 没有问题,但对于 x 源,此 RangeIndex 错误出现。

我觉得这是因为不正确的索引问题。

数据帧 df1 中 x 源的正确对齐需要更改什么

df=quandl.get("{0}".format(Ticker),start_date="2014-01-01", end_date="2018-01-26")
print(df.head(30))

df1 = get_history(symbol="{0}".format(Ticker),
            start=dt.date(2015,1,1), 
            end=dt.date(2018,1,19))
df.reset_index(inplace=True)
print(df.head(30))

month_index =df.index.to_period('M')
Run Code Online (Sandbox Code Playgroud)

Error: month_index =df.index.to_period('M') AttributeError: 'RangeIndex' object has no attribute 'to_period' 在处理上述异常的过程中,又发生了一个异常:

我所做的一些分析显示了以下列表的差异如下所示,其中 df 索引日期是第一行下方的一行(工作正常),如果 df1 索引和低开低关闭放置在同一行中的所有内容,这将引发错误。

下面给出了输出示例以供快速查看

quandl 输出是 df :( 工作没有错误)

 Date       Open     High      Low     Last    Close  Total Trade Quantity  

2017-12-14  1005.25  1015.00   999.30  1012.30  1013.10             3011786.0   
2017-12-15  1013.00  1026.40  1011.85  1019.00  1022.90             5192067.0   
2017-12-18  1011.90  1030.70  1005.80  1014.00  1016.60             2017724.0   
2017-12-19  1017.45  1017.95   999.55  1006.65  1003.95             3559449.0   
2017-12-20  1005.10  1018.60  1001.00  1016.35  1015.85             2093163.0   
2017-12-21  1014.80  1028.95   998.40  1021.50  1022.05             5529581.0 
Run Code Online (Sandbox Code Playgroud)

x 源输出是 df1 :( 我在这里看到了不同之处Date OHLC all in a row 这是导致问题的原因)

    Date Symbol Series  Prev Close     Open     High      Low     Last
728  2017-12-08   INFY     EQ      999.80  1001.00  1007.00   995.00   999.40   
729  2017-12-11   INFY     EQ     1001.85   994.95  1006.90   993.95  1005.40   
730  2017-12-12   INFY     EQ     1005.30  1002.00  1014.00  1002.00  1010.50   
731  2017-12-13   INFY     EQ     1010.50  1010.90  1019.00   997.65  1005.00   
732  2017-12-14   INFY     EQ     1003.75  1005.25  1015.00   999.30  1012.30   
733  2017-12-15   INFY     EQ     1013.10  1013.00  1026.40  1011.85  1019.00
Run Code Online (Sandbox Code Playgroud)

如何纠正这个?使 df1 数据帧与 df 在索引方面相同,看起来相同。

编辑原始帖子并更新:从 df=quandl.get 如果我打印 month_index 以下是结果,我怀疑 df1=get_history 没有返回相同因此错误。任何其他替代方法来解决它?

PeriodIndex(['2014-01', '2014-01', '2014-01', '2014-01', '2014-01', '2014-01',
             '2014-01', '2014-01', '2014-01', '2014-01',
             ...
             '2018-01', '2018-01', '2018-01', '2018-01', '2018-01', '2018-01',
             '2018-01', '2018-01', '2018-01', '2018-01'],
            dtype='period[M]', name='Date', length=1006, freq='M')
Run Code Online (Sandbox Code Playgroud)

Chi*_*and 8

注释掉

df.reset_index(inplace=True)
Run Code Online (Sandbox Code Playgroud)

这是因为索引的类型为string。将索引转换为datetime类型,然后对其应用操作。

df.index = pd.to_datetime(df.index)
month_index = df.index.to_period('M')
Run Code Online (Sandbox Code Playgroud)