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

日期格式为DD/MM/YYYY时,如何正确从DataFrame提取月份?

问题原因

你的日期格式是DD/MM/YYYY(日/月/年),但pandas的DatetimeIndex默认会把斜杠分隔的日期解析成MM/DD/YYYY(月/日/年),导致月份和日期被搞混——比如03/02/2022被当成了3月2日,而非2月3日,所以提取的月份出现错误。

修正方案

方案1:解析时指定dayfirst=True

直接告诉pandas日期的第一位是日,就能正确解析格式:

import pandas as pd

month_labels = {1: 'Jan', 2: 'Feb', 3: 'March', 4: 'April', 5: 'May', 6: 'June', 7: 'July', 8: 'August',9: 'Sept', 10: 'Oct', 11: 'Nov', 12: 'Dec'}

# 关键:添加dayfirst=True参数
df['month'] = pd.DatetimeIndex(df['Settlement_Date'], dayfirst=True).month
x = df['month'].apply(lambda x: month_labels[x])

print(x)

方案2:明确指定日期格式(更严谨)

通过format参数直接声明日期格式为%d/%m/%Y,彻底避免解析歧义:

import pandas as pd

month_labels = {1: 'Jan', 2: 'Feb', 3: 'March', 4: 'April', 5: 'May', 6: 'June', 7: 'July', 8: 'August',9: 'Sept', 10: 'Oct', 11: 'Nov', 12: 'Dec'}

# 先将字符串转为正确的datetime类型
df['datetime'] = pd.to_datetime(df['Settlement_Date'], format='%d/%m/%Y')
# 提取月份
df['month'] = df['datetime'].month
x = df['month'].apply(lambda x: month_labels[x])

print(x)

方案3:不用自定义字典,直接生成月份名称

利用pandas自带的日期格式化工具,省去手动编写映射字典的步骤:

import pandas as pd

# 先转成正确的datetime类型
df['datetime'] = pd.to_datetime(df['Settlement_Date'], format='%d/%m/%Y')
# 生成三位月份缩写(Jan/Feb/Mar...)
x = df['datetime'].dt.strftime('%b')
# 如果需要全称(January/February...),将%b替换为%B即可
# x = df['datetime'].dt.strftime('%B')

print(x)

以上三种方法都能得到预期结果:Jan, Jan, Feb, Feb, Mar, Mar

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:39:21