如何用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
相关产品推荐
相关产品推荐

