如何分离DataFrame列中字母与数字并扩展季度日期格式?
问题
需要分离DataFrame中type列的字母与数字字符,同时将qtr列的季度日期格式(如Q1 24)扩展为完整年份格式(如Q1 2024)。
原始数据
state stat1 type stat2 qtr NY up AAA01 Gr Q1 24 NY up AAA02 Re Q1 24 NY up BB01 Gr Q1 24 NY up DD01 Gr Q1 24 NY up DD02 Gr Q1 24 CA low AAA01 Re Q2 24 CA low DD01 Re Q2 24 CA low AAA01 Re Q2 24 CA low SSS01 Gr Q2 24
期望结果
state stat1 type stat2 qtr NY up AAA Gr Q1 2024 NY up AAA Re Q1 2024 NY up BB Gr Q1 2024 NY up DD Gr Q1 2024 NY up DD Gr Q1 2024 CA low AAA Re Q2 2024 CA low DD Re Q2 2024 CA low AAA Re Q2 2024 CA low SSS Gr Q2 2024
当前代码问题
当前代码存在两个核心问题:
type列用str[:3]固定取前3个字符,无法适配BB01这类字母长度不足3的情况,会保留数字字符qtr列仅做了拆分拼接,未将两位年份(24)扩展为完整四位年份(2024)
优化方案
直接用正则表达式精准处理目标列,无需额外中间列:
import pandas as pd # 读取原始数据(示例) data = [ ["NY", "up", "AAA01", "Gr", "Q1 24"], ["NY", "up", "AAA02", "Re", "Q1 24"], ["NY", "up", "BB01", "Gr", "Q1 24"], ["NY", "up", "DD01", "Gr", "Q1 24"], ["NY", "up", "DD02", "Gr", "Q1 24"], ["CA", "low", "AAA01", "Re", "Q2 24"], ["CA", "low", "DD01", "Re", "Q2 24"], ["CA", "low", "AAA01", "Re", "Q2 24"], ["CA", "low", "SSS01", "Gr", "Q2 24"], ] df = pd.DataFrame(data, columns=["state", "stat1", "type", "stat2", "qtr"]) # 1. 提取type列中的所有字母字符 df["type"] = df["type"].str.extract(r'([A-Za-z]+)') # 2. 将qtr列的两位年份扩展为四位年份 df["qtr"] = df["qtr"].str.replace(r' (\d{2})$', r' 20\1') print(df)
代码说明
- 处理type列:
str.extract(r'([A-Za-z]+)')会匹配并提取该列中所有连续的字母字符,不管字母长度多少,完美分离字母和数字 - 处理qtr列:
str.replace(r' (\d{2})$', r' 20\1')匹配末尾的两位年份,替换为20+原两位数字,实现年份扩展
运行后输出与期望结果完全一致。
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

