将DataFrame字符串索引转为DateTime时月份日期颠倒,求解决方案
解决Pandas字符串索引转DateTime时月份日期颠倒的问题
这种情况太常见了——大多是因为你的日期字符串格式是DD/MM/YYYY这类“日在前、月在后”的格式,但Pandas默认会按美式的MM/DD/YYYY来解析,自然就搞混了月份和日期。这里有几个靠谱的解决办法:
1. 明确指定日期格式(最稳妥)
如果你的日期字符串格式是固定的,直接用format参数告诉Pandas确切的解析规则,彻底避免歧义。比如你的索引是"01/05/2023"(代表5月1日),那格式就是%d/%m/%Y:
df_wt_ist.index = pd.to_datetime(df_wt_ist.index, format='%d/%m/%Y')
常用的格式符对应:
%d:两位数字的日期(01-31)%m:两位数字的月份(01-12)%Y:四位数字的年份(2023)- 如果是带时间的格式,比如
"01/05/2023 14:30",就用%d/%m/%Y %H:%M
2. 强制优先解析日在前的格式
如果你的日期格式大多是日在前,但偶尔有例外(或者不确定具体格式),可以用dayfirst=True参数,让Pandas优先把第一个数字当作日期:
df_wt_ist.index = pd.to_datetime(df_wt_ist.index, dayfirst=True)
不过要注意:如果你的数据里同时存在MM/DD和DD/MM的混合格式,这个参数可能还是会出错,所以能确定格式的话,优先用第一种方法。
3. 读取数据时直接解析日期(从源头解决)
如果你的DataFrame是从文件(比如CSV)读取的,最好在读取阶段就处理日期索引,避免后续转换:
df_wt_ist = pd.read_csv('your_data.csv', index_col=0, parse_dates=True, dayfirst=True)
或者指定格式:
df_wt_ist = pd.read_csv('your_data.csv', index_col=0, parse_dates=True, date_parser=lambda x: pd.to_datetime(x, format='%d/%m/%Y'))
额外小技巧:处理无效日期
如果索引里有格式错误的字符串,可以用errors='coerce'把无效值转换成NaT(Not a Time),方便后续清洗:
df_wt_ist.index = pd.to_datetime(df_wt_ist.index, format='%d/%m/%Y', errors='coerce')
内容的提问来源于stack exchange,提问作者may
相关产品推荐
相关产品推荐

