DataFrame中datetime.time与int类型除法运算报错的解决方法
解决datetime.time与int除法运算的问题
因为datetime.time对象不支持直接和整数做除法运算,得先把时间转换成可计算的数值,完成除法后再转回时间格式,具体步骤如下:
第一步:将time列转换为总秒数
先把datetime.time类型转成字符串,再用pd.to_timedelta转为时间差类型,最后提取总秒数:result['total_seconds'] = pd.to_timedelta(result['time'].astype(str)).dt.total_seconds()第二步:计算平均秒数
用总秒数除以days列的整数,得到每天的平均秒数:result['avg_seconds'] = result['total_seconds'] / result['days']第三步:将平均秒数转回datetime.time类型
把平均秒数转成时间差类型,再提取其中的time属性:result['avg_time'] = pd.to_timedelta(result['avg_seconds'], unit='s').dt.time
如果想简化成一行代码,也可以这么写:
result['avg_time'] = (pd.to_timedelta(result['time'].astype(str)).dt.total_seconds() / result['days'] .apply(lambda sec: pd.to_timedelta(sec, unit='s').time()))
注意:如果计算出的平均秒数带有小数,转成datetime.time时会保留微秒部分,要是不需要可以提前对avg_seconds做取整处理,比如result['avg_seconds'] = (result['total_seconds'] / result['days']).round()。
内容的提问来源于stack exchange,提问作者Grzegorz Z
相关产品推荐
相关产品推荐

