pandas对连续时间进行离散化


pandas中有特殊的时间类型,如果对str转成时间类型有疑问,请看这个链接: 链接
一般来说,如果string类型不是通用的形式,可能你还需要设置下str的类型,这样他们转的时候不会报错。

df['AKST'] = pd.to_datetime(df['AKST'], format ='%Y-%m-%d')
print('*'*44)
print(df.dtypes)
生成时间差

当我们在pandas中有两列时间,需要生成他们的时间差,这时候只需要相减即可。

df['start_time'] = pd.to_datetime(df['H'])
df['end_time'] = pd.to_datetime(df['I'])
df['solved_duration'] = df['end_time']-df['start_time']

在这里插入图片描述在这里插入图片描述
此时,新生成的类型是: Time deltas

In [1]: import datetime

# strings
In [2]: pd.Timedelta('1 days')
Out[2]: Timedelta('1 days 00:00:00')

In [3]: pd.Timedelta('1 days 00:00:00')
Out[3]: Timedelta('1 days 00:00:00')

In [4]: pd.Timedelta('1 days 2 hours')
Out[4]: Timedelta('1 days 02:00:00')

In [5]: pd.Timedelta('-1 days 2 min 3us')
Out[5]: Timedelta('-2 days +23:57:59.999997')

离散化操作

上面生成的时间差是连续的,我们分析时需要将其离散化。使用pandas中cut函数,具体介绍来自这个博客:Pandas详解二十二之离散化(分组、区间化)

Pandas为我们提供了方便的函数cut():

pd.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)
参数解释:

  • x:需要离散化的数组、Series、DataFrame对象
  • bins:分组的依据
  • right:传入False则指定左边为闭端

我们只需要在bins中填成time deltas:

bins = [pd.Timedelta('3 days'),pd.Timedelta('7 days'),pd.Timedelta('14 days'),pd.Timedelta('30 days'),pd.Timedelta('60 days'),pd.Timedelta('180 days')]
pd.cut(df['solved_duration'],bins).value_counts().plot.bar()

画出柱状图是:

在这里插入图片描述

更多分析

如果相对时间进行更多的分析,可以参考这个链接:
python-pandas 时间日期的处理(下篇)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值