2015-03-10 11 views
8

Mam DataFrame, którego indeks jest tylko datetime.time i nie ma metody w DataFrame.Index i datetime.time, aby przesunąć czas. datetime.time ma zastąpić, ale będzie działać tylko na poszczególnych elementach Serii?Jak dodawać/odejmować czas (godziny, minuty, itp.) Z Pandas DataFrame.Index, które obiekty są typu datetime.time?

Oto przykład indeksu używane:

In[526]: dfa.index[:5] 
Out[526]: Index([21:12:19, 21:12:20, 21:12:21, 21:12:21, 21:12:22], dtype='object') 

In[527]: type(dfa.index[0]) 
Out[527]: datetime.time 
+1

http://stackoverflow.com/questions/19820280/add-a-date-offset-to-a-pandas- date-index –

+0

Jaki jest wynik typu (df.index)? –

+0

@MostafaMahmoud pandas.core.index.Index, ale jeśli piszę (df.index [0]) to jest datetime.time. – DreamAwake

Odpowiedz

12

związek Liama ​​świetnie wygląda, ale również sprawdzić pandas.Timedelta - wygląda to ładnie gra z NumPy i delt czasowych Pythona.

http://pandas.pydata.org/pandas-docs/dev/timedeltas.html

pd.date_range('2014-01-01', periods=10) + pd.Timedelta(days=1) 
+2

Użycie df.index + pd.Timedelta (godziny = 12) daje mi błąd "TypeError: nieobsługiwany typ (y) argumentu dla +: 'numpy.ndarray' i 'Timedelta'". Sam indeks to pandas.core.index.Index, ale każda wartość jest datetime.time, co w jakiś sposób przeszkadza w metodzie tshift(), a także w dodawaniu Timedelta. – DreamAwake

+0

Zobacz komentarz Mostafy do oryginalnego pytania. konwersja na 'Znaczniki czasu '. – Alex

+0

@MostafaMahmoud Czy naprawdę jesteście w stanie wykonać serię lub indeks wartości datetime.time i przekonwertować bezpośrednio za pomocą pandas.Timestamp() lub nawet za pomocą metody .to_timestamp()? Te tylko rzucają mi błędy. Rozważam przystąpienie do datetime.time do daty i tworzenie DatetimeIndex wprost, ale to nie jest optymalne, ponieważ mój zestaw danych rejestruje tylko czas. – DreamAwake

0

Ten pracował dla mnie:

>> print(df) 
          TotalVolume Symbol 
2016-04-15 09:00:00  108400  2802.T 
2016-04-15 09:05:00  50300  2802.T 

>> print(cur_df.set_index(pd.to_datetime(cur_df.index.values) - datetime(2016, 4, 15))) 

      TotalVolume Symbol 
09:00:00  108400  2802.T 
09:05:00  50300  2802.T