2017-08-18 5 views
2

Je veux diviser une série temporelle en deux ensembles: former et tester. Voici mon code:Il existe deux formats de date et heure dans la même série, comment les changer pour un format?

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

Voici ce que la série chronologique ressemble: enter image description here

Et voici la série de train: Il n'y a pas de temps, seule la date de l'indice.

enter image description here

Enfin, le test: enter image description here

Comment changer l'index même forme?

+0

Hmmm, je pense que si même dataframe séparés par ILOC, il n'y a que pas '00:00:00 'Montrer. Donc, ajouter des temps n'est pas nécessaire. – jezrael

Répondre

2

Tenir compte de la série simplifiée 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 

Mais quand je sous-ensemble s ne laissant que Timestamp s qui ont besoin d'aucun élément de temps, pandas me fait la « faveur » de ne pas afficher un tas de zéros pour aucune raison.

s.iloc[::2] 

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

Mais rassurez-vous, les valeurs sont les mêmes:

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

True 

et ont la même DTYPE et la précision

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

dtype('<M8[ns]') 

Et

print(s.index.values.dtype) 

dtype('<M8[ns]') 
1

Je pense que si même données séparées par iloc, il n'y a seulement pas 00:00:00 spectacle. Donc, ajouter des temps n'est pas nécessaire, car les deux dtypes sont 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 

Il semble qu'il ya des moments comme mentionné 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