我想将时间序列分为两组:训练和测试。 这是我的代码:
train = data.iloc[:1100]
test = data.iloc[1101:]
这是火车系列:没有时间,只有索引中的日期。
如何将索引更改为相同的表单?
答案 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
分组,只留下不需要时间元素的Timestamp
,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
具有相同的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