Планирование pandas timedelta
У меня есть фреймворк pandas, который имеет два столбца datetime64 и один столбец timedelta64, что является разницей между двумя столбцами. Я пытаюсь построить гистограмму столбца timedelta, чтобы визуализировать разницу во времени между двумя событиями.
Однако использование df['time_delta']
приводит к:
TypeError: ufunc add cannot use operands with types dtype('<m8[ns]') and dtype('float64')
Попытка конвертировать столбец timedelta в значение: float--> df2 = df1['time_delta'].astype(float)
результаты:
TypeError: cannot astype a timedelta from [timedelta64[ns]] to [float64]
Как создать гистограмму pandas timedelta данных?
Ответы
Ответ 1
Вот способы конвертировать timedeltas, docs здесь
In [2]: pd.to_timedelta(np.arange(5),unit='d')+pd.to_timedelta(1,unit='s')
Out[2]:
0 0 days, 00:00:01
1 1 days, 00:00:01
2 2 days, 00:00:01
3 3 days, 00:00:01
4 4 days, 00:00:01
dtype: timedelta64[ns]
Конвертировать в секунды (это точное преобразование)
In [3]: (pd.to_timedelta(np.arange(5),unit='d')+pd.to_timedelta(1,unit='s')).astype('timedelta64[s]')
Out[3]:
0 1
1 86401
2 172801
3 259201
4 345601
dtype: float64
Преобразование с использованием астипа будет округлено до этой единицы
In [4]: (pd.to_timedelta(np.arange(5),unit='d')+pd.to_timedelta(1,unit='s')).astype('timedelta64[D]')
Out[4]:
0 0
1 1
2 2
3 3
4 4
dtype: float64
Отдел даст точное представление
In [5]: (pd.to_timedelta(np.arange(5),unit='d')+pd.to_timedelta(1,unit='s')) / np.timedelta64(1,'D')
Out[5]:
0 0.000012
1 1.000012
2 2.000012
3 3.000012
4 4.000012
dtype: float64
Ответ 2
Вы можете построить хорошие гистограммы, используя типы данных NumPy Timedelta.
Например:
df['time_delta'].astype('timedelta64[s]').plot.hist()
создаст гистограмму дельт времени в секундах. Вместо этого вы можете использовать минуты:
(df['time_delta'].astype('timedelta64[s]') / 60).plot.hist()
или используйте [m]
timedelta.
df['time_delta'].astype('timedelta64[m]').plot.hist()
Вот список других типов дельты времени (из документов), которые вы можете выбрать, в зависимости от необходимого разрешения:
Code Meaning Time span (relative) Time span (absolute)
h hour +/- 1.0e15 years [1.0e15 BC, 1.0e15 AD]
m minute +/- 1.7e13 years [1.7e13 BC, 1.7e13 AD]
s second +/- 2.9e11 years [2.9e11 BC, 2.9e11 AD]
ms millisecond +/- 2.9e8 years [ 2.9e8 BC, 2.9e8 AD]
us microsecond +/- 2.9e5 years [290301 BC, 294241 AD]
ns nanosecond +/- 292 years [ 1678 AD, 2262 AD]
ps picosecond +/- 106 days [ 1969 AD, 1970 AD]
fs femtosecond +/- 2.6 hours [ 1969 AD, 1970 AD]
as attosecond +/- 9.2 seconds [ 1969 AD, 1970 AD]