CSV日期列M/D顺序错误:如何统一年份为2018并修正解析格式
解决Pandas日期解析中月份识别错误的问题
这个问题很常见——Pandas的pd.to_datetime在自动推断日期格式时,会优先选择“合法”的月份值,导致像9/4/2018这样的日期被误判为月/日/年(9月4日),而不是你实际需要的日/月/年(4月9日)。前面的14/3/18能正确解析,是因为14不可能作为月份,Pandas只能默认按日/月/年处理。
下面给你两种可靠的解决方法:
方法1:强制指定日在前(dayfirst=True)
直接告诉Pandas,日期字符串的第一部分是日,第二部分是月,这样不管年份是两位还是四位,都能正确解析:
import pandas as pd # 示例数据 df = pd.DataFrame({'Date': ['14/3/18', '28/3/18', '9/4/2018']}) # 正确解析日期 df['DateTime'] = pd.to_datetime(df['Date'], dayfirst=True) print(df['DateTime'])
输出结果:
0 2018-03-14 1 2018-03-28 2 2018-04-09 Name: DateTime, dtype: datetime64[ns]
方法2:明确指定日期格式(灵活适配两位/四位年份)
如果你的日期格式固定是日/月/年,可以用format参数结合%d(日)、%m(月)、%y(两位年份),Pandas会自动将两位年份补全为四位(默认补20xx),同时也兼容四位年份的输入:
df['DateTime'] = pd.to_datetime(df['Date'], format='%d/%m/%y')
这个方法同样能得到正确的结果,而且比自动推断更快,适合处理大量数据的场景。
为什么之前会出错?
Pandas的自动日期推断逻辑是:当遇到像9/4/2018这样的字符串时,它会检查两个可能的格式:
- 月/日/年:9是合法月份(1-12),4是合法日期,所以优先采用这个格式
- 日/月/年:9是合法日期,但4也是合法月份,这时候Pandas会默认优先选择月在前的格式(符合美式日期习惯),导致解析错误
通过上面两种方法,你可以强制Pandas按照你需要的日/月/年格式解析,彻底解决这个问题。
内容的提问来源于stack exchange,提问作者Jonanthan
相关产品推荐
相关产品推荐

