如何将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
相关产品推荐
相关产品推荐

