计算DataFrame两列营业时间出现'Series'无tzinfo属性错误如何解决
错误原因
businesstimedelta的difference方法仅支持传入单个datetime类型对象,你传入了pandas的Series(整列数据),而Series本身没有tzinfo属性,因此触发报错。
解决方法
- 先将DataFrame的两个时间列转换为标准datetime类型,统一时区配置
- 逐行调用
difference方法计算每行的营业时间差
修正后代码
import datetime import pytz import businesstimedelta import pandas as pd # 工作日规则定义 workday = businesstimedelta.WorkDayRule( start_time=datetime.time(6), end_time=datetime.time(18), working_days=[0, 1, 2, 3, 4]) businesshrs = businesstimedelta.Rules([workday]) # 时间列预处理:转为datetime格式,配置时区 # 若时间已带时区,将tz_localize替换为tz_convert统一为相同时区即可 df_dur['startdate'] = pd.to_datetime(df_dur['startdate']).dt.tz_localize('Asia/Shanghai') df_dur['enddate'] = pd.to_datetime(df_dur['enddate']).dt.tz_localize('Asia/Shanghai') # 逐行计算营业时间差 df_dur['business_duration'] = df_dur.apply( lambda row: businesshrs.difference(row['startdate'], row['enddate']), axis=1 ) # 如需直接提取小时数值,可使用以下代码 # df_dur['business_duration_hours'] = df_dur['business_duration'].apply(lambda x: x.hours) print(df_dur)
注意:两个时间列必须处于同一时区,否则会触发计算错误。
内容的提问来源于stack exchange,提问作者sebikooo
相关产品推荐
相关产品推荐

