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

如何在Pandas中移除日期列字符串末尾的时区信息?

解决DataFrame日期列移除时区后缀并转换为datetime的问题

可行解决方案

以下几种方法都能简便实现需求,适配不同时区后缀的情况:

方法1:字符串分割(直观可靠)

利用日期时间与时区的空格分隔特性,仅分割前两次,取前两部分拼接:

import pandas as pd

# 拆分并保留日期时间部分
df['Date'] = df['Date'].str.split(' ', n=2).str[:2].str.join(' ')
# 转换为datetime对象
df['Date'] = pd.to_datetime(df['Date'], format='%Y%m%d %H:%M:%S')

n=2确保即使时区包含空格(极端情况),也不会误拆分日期时间部分。

方法2:正则提取(适配复杂格式)

用正则精准匹配开头的日期时间格式,无视后续任何时区内容:

df['Date'] = df['Date'].str.extract(r'^(\d{8} \d{2}:\d{2}:\d{2})')[0]
df['Date'] = pd.to_datetime(df['Date'], format='%Y%m%d %H:%M:%S')

正则^(\d{8} \d{2}:\d{2}:\d{2})匹配8位日期+空格+时分秒的固定格式,完美适配所有时区后缀。

方法3:固定长度截取(格式绝对统一时用)

如果所有字符串的日期时间部分长度完全一致(比如无引号的20231101 05:00:00是16位),可直接截取:

# 无引号字符串取前16位
df['Date'] = df['Date'].str[:16]
# 带引号字符串取第1到17位(跳过首尾引号)
# df['Date'] = df['Date'].str[1:17]
df['Date'] = pd.to_datetime(df['Date'], format='%Y%m%d %H:%M:%S')

这种方法性能最优,但仅适用于格式完全固定的场景。


之前方法失败的原因

  • 第一个replace的正则错误:^.*\]\s*匹配到]为止,但你的字符串中无],完全不生效;
  • str.strip()是去除首尾字符集合,而非移除指定子串,会误删日期时间部分的字符;
  • rstrip()是从右侧逐个删除指定字符集合,而非移除整个时区子串,会破坏时间格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 12:03:34