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

如何将Pandas DataFrame带时区DateTime转换为标准格式?

问题描述

需将Pandas DataFrame中带时区的DateTime列(格式示例:2023-11-17 15:40:00+11:00)转换为不带时区的YYYY-MM-DD HH:MI:SS格式(示例:2023-11-17 15:40:00),尝试以下代码未成功:

dcsv = df.to_csv(header=None)
StringData = StringIO(dcsv)
df = pd.read_csv(StringData)
col_names = ['Datetime', 'Open', 'Close', 'Volume', 'RSI', 'Signle']
df.columns = col_names
df['DateTime'] = pd.to_datetime(df['DateTime'], errors='coerce', utc=True).dt.strftime('%Y-%m-%d %H:%M:%S')
解决方案

你的代码存在两个核心问题:一是多了「转CSV再读回」的冗余操作,可能破坏原时间列的格式信息;二是utc=True参数会强制将时间转成UTC时区,改变了原时间值,并非你需要的「仅移除时区标记」。

以下两种方法可解决问题:

方法一:保留datetime类型(推荐)

如果希望DateTime列仍保持datetime数据类型(而非字符串),直接移除时区标记即可:

# 先确保列是datetime类型(若原列已是带时区的datetime,可跳过此步)
df['DateTime'] = pd.to_datetime(df['DateTime'], errors='coerce')
# 移除时区标记,保留原时间数值
df['DateTime'] = df['DateTime'].dt.tz_localize(None)

方法二:转换为指定格式的字符串

如果确实需要将时间转成字符串格式,先移除时区再格式化:

df['DateTime'] = pd.to_datetime(df['DateTime'], errors='coerce').dt.tz_localize(None).dt.strftime('%Y-%m-%d %H:%M:%S')

注意点

  • 若原DataFrame的DateTime列已经是datetime64[ns, tz]类型(带时区的datetime),可以直接跳过pd.to_datetime()转换步骤
  • 不要使用utc=True参数,除非你明确需要将时间转换为UTC时区,这会改变原时间的数值(比如+11:00时区的时间会被转成比原时间晚11小时的UTC时间)

内容的提问来源于stack exchange,提问作者mylottofinder.com.au

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:44:59