【问题标题】:There are two format of Time series datetime in the same series, how to change them to one format?同一系列的时间序列日期时间有两种格式,如何将它们更改为一种格式?
【发布时间】:2018-01-26 20:37:32
【问题描述】:

我想将时间序列分成两组:训练和测试。 这是我的代码:

train = data.iloc[:1100]
test = data.iloc[1101:]

时间序列是这样的:

这是火车系列:没有时间,只有索引中的日期。

最后,测试:

如何将索引改为相同的形式?

【问题讨论】:

  • 嗯,我认为如果相同的数据帧被 iloc 分隔,则只有没有 00:00:00 显示。所以不需要添加时间。

标签: python-2.7 pandas datetime timestamp time-series


【解决方案1】:

考虑简化系列s

s = pd.Series(1, pd.date_range('2010-08-16', periods=5, freq='12H'))

s

2010-08-16 00:00:00    1
2010-08-16 12:00:00    1
2010-08-17 00:00:00    1
2010-08-17 12:00:00    1
2010-08-18 00:00:00    1
Freq: 12H, dtype: int64

但是当我将s 子集化而只留下不需要时间元素的Timestamps 时,pandas 对我来说是一个“好处”,即无缘无故地不显示一堆零。

s.iloc[::2]

2010-08-16    1
2010-08-17    1
2010-08-18    1
Freq: 24H, dtype: int64

但请放心,值是一样的:

s.iloc[::2].index[0] == s.index[0]

True

并且具有相同的数据类型和精度

print(s.iloc[::2].index.values.dtype)

dtype('<M8[ns]')

print(s.index.values.dtype)

dtype('<M8[ns]')

【讨论】:

    【解决方案2】:

    我认为如果相同的数据框由iloc 分隔,则只有 00:00:00 显示。所以不需要添加时间,因为dtypes 都是DatetimeIndex

    mux = pd.MultiIndex.from_product([['GOOG'],
    pd.DatetimeIndex(['2010-08-16 00:00:00',
                      '2010-08-17 00:00:00',
                      '2010-08-18 00:00:00',
                      '2010-08-19 00:00:00',
                      '2010-08-20 15:00:00'])], names=('Ticker','Date')) 
    
    data = pd.Series(range(5), mux)
    print (data)
    Ticker  Date               
    GOOG    2010-08-16 00:00:00    0
            2010-08-17 00:00:00    1
            2010-08-18 00:00:00    2
            2010-08-19 00:00:00    3
            2010-08-20 15:00:00    4
    

    #splitting
    train = data.iloc[:2]
    test = data.iloc[2:]
    print (train)
    Ticker  Date      
    GOOG    2010-08-16    0
            2010-08-17    1
    dtype: int32
    

    好像有提到piRSquared

    print (test)
    Ticker  Date               
    GOOG    2010-08-18 00:00:00    2
            2010-08-19 00:00:00    3
            2010-08-20 15:00:00    4
    dtype: int32
    
    #check if same dtypes
    print (train.index.get_level_values('Date').dtype)
    datetime64[ns]
    
    print (test.index.get_level_values('Date').dtype)
    datetime64[ns]
    
    #if want see only times in test dataframes
    m = test.index.get_level_values('Date').time != pd.to_datetime('2015-01-01').time()
    only_times = test[m]
    print (only_times)
    Ticker  Date               
    GOOG    2010-08-20 15:00:00    4
    dtype: int32
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 2021-01-20
      • 1970-01-01
      • 2014-08-24
      • 1970-01-01
      • 2021-11-30
      相关资源
      最近更新 更多