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

如何将Pandas中季度数据的字符串列转换为可绘图格式?

解决PeriodIndex解析自定义季度格式失败的问题

数据与代码情况

你的DataFrame格式如下:

Quarter         London      UK          NaN
6   Mar-May 1992    0.12305     0.098332    NaN
7   Apr-Jun 1992    0.123895    0.097854    NaN
8   May-Jul 1992    0.124076    0.098878    NaN
9   Jun-Aug 1992    0.127796    0.099365    NaN
10  Jul-Sep 1992    0.126064    0.099371    NaN

你尝试用以下代码生成PeriodIndex时触发报错:

quarter_column = df.Quarter
# create PeriodIndex
periods = pd.PeriodIndex(quarter_column, freq='Q-Mar')
pd.DataFrame(df, index=periods)

报错信息:

DateParseError: Unknown datetime string format, unable to parse: MAR-MAY 1992

问题原因

Pandas的PeriodIndex无法直接识别Mar-May 1992这种自定义的季度范围格式,它仅支持标准季度标识(如Q1 1992、1992Q1)或可直接解析的单一日期格式。

解决方案

方法1:提取结束月份生成标准周期

通过提取每个季度的结束月份,生成可解析的日期后转换为PeriodIndex:

import pandas as pd

# 提取季度的结束月份与年份,拼接成"月份 年份"格式
df['end_month_year'] = df['Quarter'].str.split('-').str[-1]
# 转换为datetime后生成PeriodIndex,freq根据你的财年需求调整
periods = pd.to_datetime(df['end_month_year']).dt.to_period(freq='Q-Mar')
# 设置索引并清理临时列
df.set_index(periods, inplace=True)
df.drop('end_month_year', axis=1, inplace=True)

方法2:手动映射自定义季度到周期

如果你的季度范围和标准财年季度对应关系明确,可以直接创建映射字典转换:

# 根据你的业务逻辑定义自定义季度到Period的映射
quarter_map = {
    'Mar-May 1992': pd.Period('1992Q4', freq='Q-Mar'),
    'Apr-Jun 1992': pd.Period('1993Q1', freq='Q-Mar'),
    'May-Jul 1992': pd.Period('1993Q1', freq='Q-Mar'),
    'Jun-Aug 1992': pd.Period('1993Q1', freq='Q-Mar'),
    'Jul-Sep 1992': pd.Period('1993Q2', freq='Q-Mar')
}
# 映射生成PeriodIndex并设置为索引
df.set_index(df['Quarter'].map(quarter_map), inplace=True)

注意:freq='Q-Mar'表示财年结束于3月,对应的季度划分是:Q1(Apr-Jun)、Q2(Jul-Sep)、Q3(Oct-Dec)、Q4(Jan-Mar),请根据你的实际业务需求确认周期映射是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:37:32