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

如何将pandas Series转换为int类型解决timedelta传参报错

问题原因

你通过.loc条件筛选返回的结果始终是pandas的Series结构,哪怕筛选后只剩1条匹配数据,它也不是单个整数标量。你之前调用tz.astype(int)只是修改了Series内部元素的存储类型,整个变量本质还是Series对象,timedelta的hours参数只接受数值类型,不接受Series,所以会触发类型报错。
从你打印的tz结果也能看出来:

215   -3
Name: summer, dtype: int32

左侧的215是这条数据对应的行索引,这是Series的标准打印格式,说明你拿到的根本不是单独的-3这个数值。
另外你原来的多国家判断写一长串or非常冗余,直接用成员判断in更简洁。

修复方案
  • 如果你能确定每个teamname在时区表里只会匹配到唯一一条记录,直接用.item()方法提取Series里的标量值即可:
# 替换原来的长串or判断
if country in {"Brazil", "DR-Congo", "Indonesia", "Kazakhstan", "Russia"}:
    tz = files.tz_club.loc[files.tz_club["shrt_nme"] == teamname, "summer"].item()

adjust_time = timedelta(hours=tz)
  • 如果存在匹配不到数据、或者匹配到多条数据的可能,建议先做空值判断,再取第一条匹配结果,避免运行报错:
if country in {"Brazil", "DR-Congo", "Indonesia", "Kazakhstan", "Russia"}:
    tz_match = files.tz_club.loc[files.tz_club["shrt_nme"] == teamname, "summer"]
    if not tz_match.empty:
        tz = tz_match.iloc[0]
        adjust_time = timedelta(hours=tz)
    else:
        # 这里补充未匹配到时区的兜底处理逻辑,比如给默认值、打日志
        tz = 0
        adjust_time = timedelta(hours=tz)

内容的提问来源于stack exchange,提问作者SpingoTakagi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:06:27