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

