Ein natives Pandas Timedelta()
(mit Version 0.20.3
), kann nicht mit astype()
zu einer bestimmten Frequenz konvertieren, obwohl die Dokumente sagen, dass es möglich sein sollte. Ich versuche herauszufinden, was ich vermisse.TimeDelta-Objekt kann nicht mit astype konvertiert werden()
Vom Timedelta docs:
Timedelta-Serie, TimedeltaIndex und Timedelta Skalare können durch eine anderes Timedelta durch Teile zu anderen ‚Frequenzen‘ umgewandelt werden, oder durch zu einem bestimmten Timedelta Typ astyping.
Es stimmt, dass ich durch Division mit einem anderen Timedelta umwandeln kann:
import pandas as pd
pd.__version__
# 0.20.3
day = pd.Timedelta("1 day")
day/pd.Timedelta(1, "h")
# 24.0
Aber astype()
versagt:
day.astype('timedelta64[h]')
# AttributeError: 'Timedelta' object has no attribute 'astype'
Das Beispiel in der Dokumentation tatsächlich pd.Timedelta()
nicht verwendet, und dass scheint ein Teil des Problems zu sein. Stattdessen verwendet es Series(date_range)
Subtraktion und datetime.timedelta
(was ein wenig lustig scheint, gibt es eine native Pandas Timedelta()
).
# This example is used in the Timedelta docs.
import datetime
td = pd.Series(pd.date_range('20130101', periods=4)) - pd.Series(pd.date_range('20121201', periods=4))
td[2] += datetime.timedelta(minutes=5, seconds=3)
td[3] = np.nan
td
0 31 days 00:00:00
1 31 days 00:00:00
2 31 days 00:05:03
3 NaT
dtype: timedelta64[ns]
# ...
td.astype('timedelta64[s]')
Out[75]:
0 2678400.0
1 2678400.0
2 2678703.0
3 NaN
dtype: float64
Die Art der day
aus meinem Beispiel ist jedoch unterschiedlich:
type(day)
# <class 'pandas._libs.tslib.Timedelta'>
Ich habe noch nicht in die tslib
Quelle gegraben, um herauszufinden, was unter der Haube vor sich geht - in der Hoffnung jemand kann Klären Sie die scheinbare Diskrepanz zwischen dem, was in den Dokumenten passiert, und dem, was ich hier zu tun versuche. Vielen Dank!
Ok, danke für die Klarstellung. –