You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

计算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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:27:03