同一系列中有两种时间序列日期时间格式,如何将它们更改为一种格式?

时间:2017-08-18 08:19:36

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

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

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

以下是时间序列的样子: enter image description here

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

enter image description here

最后,测试: enter image description here

如何将索引更改为相同的表单?

2 个答案:

答案 0 :(得分:2)

考虑简化系列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分组,只留下不需要时间元素的Timestamppandas会让我“不喜欢”无法无理地显示一堆零。

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

具有相同的dtype和精度

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

dtype('<M8[ns]')

print(s.index.values.dtype)

dtype('<M8[ns]')

答案 1 :(得分:1)

我认为如果相同的数据框由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