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

使用Pandas读取CSV时如何指定时区 解决CAT时区识别警告问题

问题原因与解决方案

问题根源

  • tzinfos是dateutil.parser.parse方法的参数,并非pd.read_csv的官方参数,因此直接传入会触发TypeError
  • 警告产生的原因是read_csv默认调用dateutil解析带时区标识的时间字符串时,无法识别CAT时区缩写,需要手动给底层解析器传入时区映射规则

最优解决方案(适配未来版本,一步完成解析)

通过自定义日期解析函数,将tzinfos参数传递给底层的dateutil解析器,直接消除警告:

import pandas as pd
from dateutil.parser import parse

# 定义CAT时区映射:CAT对应UTC+2,偏移量单位为秒
custom_tzinfos = {"CAT": 2 * 3600}

def cat_time_parser(date_str):
    # 传入时区映射和dayfirst规则
    return parse(date_str, tzinfos=custom_tzinfos, dayfirst=True)

# 读取CSV时指定自定义解析器
df = pd.read_csv(
    path,
    parse_dates=["timestamp"],
    date_parser=cat_time_parser
)

处理后得到的timestamp列直接是带CAT时区的时区感知类型,无需后续额外转换,也不会再触发警告。

替代方案(后续手动处理时区)

如果不需要一步解析为时区感知类型,也可以先将时间列读取为字符串,后续统一处理:

# 读取时指定timestamp列为字符串类型,避免自动解析触发警告
df = pd.read_csv(path, dtype={"timestamp": str})
# 移除末尾的CAT标识后转成datetime,再手动绑定时区
df["timestamp"] = pd.to_datetime(
    df["timestamp"].str.replace(r"\s*CAT$", "", regex=True),
    dayfirst=True
).dt.tz_localize("Africa/Johannesburg") # Africa/Johannesburg即为标准CAT时区

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:36:03