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

如何用Python正则拆分DataFrame孕产次列得到孕次产次两个新列

问题根因

你定义的Split_gravidity_parity函数中,直接对df['gravidity']和df['parity']整列赋值,每次处理单行数据时都会把整个DataFrame的对应列全部覆盖为当前行的匹配结果,最终所有行的取值都会和最后一次处理的行一致(你的示例中是首行)。

修正方案

推荐两种实现方式,你可以按需选择:

方案1:调整自定义函数的返回逻辑

修改函数使其返回当前行对应的孕次、产次结果,再统一赋值给新列:

import re
import pandas as pd

def split_gravidity_parity(gp_str):
    # 匹配孕次
    g_res = re.search(r'g(\d+)', gp_str)
    gravidity = int(g_res.group(1)) if g_res else None
    # 匹配产次
    p_res = re.search(r'p(\d+)', gp_str)
    parity = int(p_res.group(1)) if p_res else None
    return pd.Series([gravidity, parity])

# 应用函数并赋值给两个新列
df[['gravidity', 'parity']] = df['gravidityAndParity'].apply(split_gravidity_parity)

方案2:用pandas内置方法实现(更高效简洁)

直接使用Series.str.extract方法批量提取,不需要自定义函数,性能更优:

# 正则匹配g和p后的数字,直接赋值为新列并转整数类型
df[['gravidity', 'parity']] = df['gravidityAndParity'].str.extract(r'g(\d+)p(\d+)').astype(int)

两种方案执行后,df['gravidity']和df['parity']的输出就会符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:27:02