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

如何在DataFrame中交换datetime列的日与月值?

解决DataFrame中Datetime列日与月颠倒的问题

当你的DataFrame里datetime列已被识别为datetime类型,但日和月的数值出现颠倒时,可通过以下两种方法修正:

方法一:直接操作Datetime组件(推荐)

利用Pandas的datetime属性提取年、月、日等时间部分,互换日和月的值后重新构造正确的datetime对象,同时完整保留时分秒信息:

import pandas as pd

df['datetime'] = pd.to_datetime({
    'year': df['datetime'].dt.year,
    'month': df['datetime'].dt.day,
    'day': df['datetime'].dt.month,
    'hour': df['datetime'].dt.hour,
    'minute': df['datetime'].dt.minute,
    'second': df['datetime'].dt.second
})

这种方法无需转换为字符串,处理效率更高,适合包含时分秒的完整时间数据。比如示例中2023-01-02 10:00:00会被直接修正为2023-02-01 10:00:00。

方法二:字符串中转法

将错误的datetime转换为日在前、月在后格式的字符串,再重新解析为正确的datetime:

# 包含时分秒的场景
df['datetime'] = pd.to_datetime(df['datetime'].dt.strftime('%Y-%d-%m %H:%M:%S'))

# 仅日期的场景
# df['datetime'] = pd.to_datetime(df['datetime'].dt.strftime('%Y-%d-%m'))

纠正你原代码的问题

你之前的代码pd.to_datetime(df["datetime"].dt.strftime('%Y-%m-%d'))无效:它把已经颠倒的datetime转成了依旧颠倒的字符串格式,再转回datetime后问题完全没解决。正确的做法是用%Y-%d-%m格式生成字符串,让日和月的顺序恢复正确,再解析为datetime。

效果验证

处理前数据:

id            datetime  temp_narvoz   q_virob   
0      1 2023-01-02 10:00:00          1.4  0.688331  
1      2 2023-01-02 11:00:00          1.4  0.800867  
...

处理后数据:

id            datetime  temp_narvoz   q_virob   
0      1 2023-02-01 10:00:00          1.4  0.688331  
1      2 2023-02-01 11:00:00          1.4  0.800867  
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:50:23