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

如何移除Pandas DataFrame所有datetime列的时区信息

Pandas统一移除所有datetime列时区信息的解决方案

报错原因说明

直接对全列调用tz_convert(None)报错,是因为本身不带时区的datetime列(tz-naive)不支持该方法,需要先过滤或判断。

无需自定义函数的实现方案

方案1:单行lambda全列处理

直接将判断逻辑整合到lambda中,适配所有列类型:

data = data.apply(lambda x: x.dt.tz_convert(None) if pd.api.types.is_datetime64_any_dtype(x) and x.dt.tz is not None else x)

该写法会自动跳过非datetime列、以及本身不带时区的datetime列,无需额外处理。

方案2:筛选datetime列批量处理(性能更优)

适合列数较多、数据量较大的场景,仅遍历datetime列处理:

# 筛选所有datetime类型列
dt_cols = data.select_dtypes('datetime64').columns
# 批量处理带时区的列
data[dt_cols] = data[dt_cols].apply(lambda x: x.dt.tz_convert(None) if x.dt.tz else x)

方案3:astype直接转换(最简洁)

直接将所有datetime列转为无时区的datetime64[ns]类型,自动完成时区移除:

dt_cols = data.select_dtypes('datetime64').columns
data[dt_cols] = data[dt_cols].astype('datetime64[ns]')

注意:上述方法默认行为与tz_convert(None)一致,会先将带时区的时间转换为UTC时间后再移除时区属性。如果需要保留原时间数值仅抹除时区标识,将tz_convert(None)替换为dt.tz_localize(None)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:45:03