如何基于Pandas DataFrame的Comments列创建DOB与POB新列
解决方案
可以通过Pandas的字符串提取方法结合条件赋值来实现需求,步骤清晰且易理解:
import pandas as pd import numpy as np # 初始化原始DataFrame ds1 = {'Name':["Juan Pablo Montoya","Jose Hiero","Martin Vasquez"], "Comments" : ["DOB 18 May 1967; POB Mexico.","POB Mexico.","-0-"]} df1 = pd.DataFrame(data=ds1) # 1. 提取DOB列:匹配"DOB"后到分号前的内容 df1['DOB'] = df1['Comments'].str.extract(r'DOB\s*(.*?);', expand=False) # 2. 提取POB列:匹配"POB"后到句号前的内容 df1['POB'] = df1['Comments'].str.extract(r'POB\s*(.*?)\.', expand=False) # 3. 处理Comments为"-0-"的情况,将对应行的DOB和POB设为NaN mask = df1['Comments'] == '-0-' df1.loc[mask, ['DOB', 'POB']] = np.nan # 查看结果 print(df1)
执行后输出的目标DataFrame:
Name Comments DOB POB 0 Juan Pablo Montoya DOB 18 May 1967; POB Mexico. 18 May 1967 Mexico 1 Jose Hiero POB Mexico. NaN Mexico 2 Martin Vasquez -0- NaN NaN
代码说明
- 提取DOB:正则表达式
r'DOB\s*(.*?);中,\s*匹配任意数量的空格,(.*?)是非贪婪匹配,捕获DOB后到分号前的所有内容;没有匹配到的行自动填充NaN。 - 提取POB:正则表达式
r'POB\s*(.*?)\.'捕获POB后到句号前的内容,同样无匹配时填充NaN。 - 处理"-0-"行:通过布尔掩码定位符合条件的行,直接将对应列值设为
NaN。
内容的提问来源于stack exchange,提问作者Giampaolo Levorato
相关产品推荐
相关产品推荐

