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

如何从CSV的Pandas Datetime列提取年月并修正日期转换错误?

解决Pandas日期转换颠倒问题并提取年月

首先,咱们先搞定日期解析错误的核心问题——你遇到的是因为pd.to_datetime()默认会把日期字符串里的第一个数字当成月份,但你的数据实际是日/月/年格式(比如2/1/2018是1月2日,不是2月1日),而且你之前写的格式%d/%M/%Y也有小错误:大写M代表分钟,月份应该用小写m。下面给你两种靠谱的修复方法:

方法1:指定format参数(推荐)

直接告诉Pandas你的日期格式是%d/%m/%Y,这样解析既精准又高效,适合格式统一的数据集:

import pandas as pd

# 读取CSV后转换日期列
df['OrderDate'] = pd.to_datetime(df['OrderDate'], format='%d/%m/%Y')

方法2:用dayfirst=True参数

如果你的数据偶尔存在混合格式,但大部分是日在前的情况,可以用这个参数让Pandas优先把第一个数字当作日期:

df['OrderDate'] = pd.to_datetime(df['OrderDate'], dayfirst=True)

不过这个方法不如指定format精准,容易在混合格式下出问题,所以优先选第一种。


接下来是提取月份和年份,给你三种常用方式,按需选择:

方式1:提取为时期对象(适合后续时间分析)

如果需要保留时间序列的特性,用dt.to_period('M')会得到类似2018-01的时期对象,方便后续按年月分组统计:

df['YearMonth'] = df['OrderDate'].dt.to_period('M')

方式2:提取为字符串格式(适合导出或展示)

如果要得到2018-01或者Jan-2018这类可读性强的字符串,用dt.strftime():

# 年-月格式
df['YearMonth'] = df['OrderDate'].dt.strftime('%Y-%m')

# 月份缩写-年份格式
df['YearMonth'] = df['OrderDate'].dt.strftime('%b-%Y')

方式3:分别提取年和月为单独列

如果需要把年、月拆成两个独立列:

df['Year'] = df['OrderDate'].dt.year
df['Month'] = df['OrderDate'].dt.month

举个完整的实操例子,假设你的CSV数据如下:

OrderDate,Amount
2/1/2018,100
3/1/2018,200
15/2/2018,150

运行代码:

import pandas as pd

df = pd.read_csv('your_file.csv')
# 正确转换日期
df['OrderDate'] = pd.to_datetime(df['OrderDate'], format='%d/%m/%Y')
# 提取年月字符串
df['YearMonth'] = df['OrderDate'].dt.strftime('%Y-%m')

print(df)

输出结果:

OrderDate  Amount YearMonth
0 2018-01-02     100    2018-01
1 2018-01-03     200    2018-01
2 2018-02-15     150    2018-02

这样就完美解决了日期颠倒的问题,同时得到了你需要的年月信息~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:32:35