绘制Pandas时间

2024-04-25 06:32:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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]

如何创建熊猫时间增量数据的直方图?


Tags: 数据pandastime时间floattimedeltadeltans
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()

下面是您可能需要的其他时间增量类型(来自the docs)的列表,具体取决于您需要的分辨率:

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]

以下是转换时间增量的方法,文档是here

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

使用astype转换将舍入到该单元

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

相关问题 更多 >