使用Pandas将长季度日期格式转换为短季度日期格式
解决方案
针对你需要处理DataFrame的Date列,将空格替换为"."并保留年份后两位的需求,这里给出几种可行的实现方式:
方法一:正则表达式替换(最简洁)
利用str.replace结合正则表达式,一次性完成空格替换和年份截取:
import pandas as pd # 示例数据 df = pd.DataFrame({ "ID": ["AA", "BB", "CC", "CC", "CC", "DD"], "Date": ["Q1 2022", "Q4 2024", "Q2 2025", "Q3 2025", "Q1 2021", "Q2 2021"] }) # 处理Date列 df["Date"] = df["Date"].str.replace(r' (\d{2})(\d{2})', r'.\2', regex=True)
解释:正则r' (\d{2})(\d{2})'匹配空格加四位年份,把空格替换为".",并只保留后两位年份(\2对应第二个捕获组的两位数字)。
方法二:拆分字符串后拼接
先把Date列按空格拆分成季度和年份两部分,再分别处理后拼接:
# 拆分季度和年份 df[["Quarter", "Year"]] = df["Date"].str.split(" ", expand=True) # 拼接处理后的内容:季度 + "." + 年份后两位 df["Date"] = df["Quarter"] + "." + df["Year"].str[-2:] # 可选:删除临时生成的拆分列 df = df.drop(["Quarter", "Year"], axis=1)
方法三:apply自定义函数
如果需要更灵活的处理逻辑,可以用apply调用自定义函数:
def process_date(date_str): quarter, year = date_str.split(" ") return f"{quarter}.{year[-2:]}" df["Date"] = df["Date"].apply(process_date)
纠正你之前尝试的错误:
df.Date.fillna(value=., inplace=True)是填充缺失值的方法,并非替换空格,替换空格应使用str.replace(" ", "."),但单独替换后仍需处理年份,不如用正则一步到位。df["Date"].str[2:]会直接截取从第3个字符开始的内容,比如"Q1 2022"会变成" 2022",完全丢失了季度信息,不符合需求。
执行上述任意一种方法后,DataFrame会输出你期望的结果:
ID Date 0 AA Q1.22 1 BB Q4.24 2 CC Q2.25 3 CC Q3.25 4 CC Q1.21 5 DD Q2.21
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

