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

基于正则表达式处理Pandas DataFrame的PN列,生成DOB列与异常数据标记列

基于正则表达式处理Pandas DataFrame的PN列,生成DOB列与异常数据标记列

嘿,这事儿好办!咱们用Pandas结合正则表达式就能轻松搞定,既能提取出正确的出生日期(YYMMDD),又能把有问题的数据标记出来,还不会丢失任何原始数据~

第一步:先构造你的示例数据

首先咱们把你给出的示例数据转换成Pandas DataFrame,方便后续处理:

import pandas as pd

# 构造示例数据
data = {
    "PN": ["800204-1567", "470205-1368", "550107-Y001"],
    "Analysis": ["240508", "220608", "230608"]
}
df = pd.DataFrame(data)

第二步:编写处理逻辑

接下来我们用正则表达式实现两个需求:提取正确的DOB列,标记有问题的Problem列:

# 提取PN列中前6位纯数字作为DOB,不符合的返回空字符串
df["DOB"] = df["PN"].str.extract(r'^(\d{6})-', expand=False).fillna("")

# 标记不符合「6位数字-4位数字」格式的PN数据,符合的留空
df["Problem"] = df["PN"].where(~df["PN"].str.match(r'^\d{6}-\d{4}$'), "")

第三步:查看处理结果

运行上面的代码后,你的DataFrame就会变成想要的样子:

PNAnalysisDOBProblem
800204-1567240508800204
470205-1368220608470205
550107-Y001230608550107550107-Y001

代码逻辑解释

  • 提取DOB列:str.extract(r'^(\d{6})-', expand=False) 会匹配以6位数字开头、后面紧跟-的片段,提取这6位数字作为出生日期;如果前6位不是纯数字或者没有-,就会返回NaN,我们用fillna("")把空值转换成空字符串,让表格更整洁。
  • 标记Problem列:str.match(r'^\d{6}-\d{4}$') 会检查PN是否完全符合「6位数字-4位数字」的标准格式,~表示取反,where方法会把不符合格式的PN保留在Problem列,符合格式的则设为空字符串。

如果你的错误判断标准只是「前6位包含字母」,那可以把Problem列的代码改成这样:

# 仅标记前6位不是纯数字的PN数据
df["Problem"] = df["PN"].where(~df["PN"].str[:6].str.isdigit(), "")

备注:内容来源于stack exchange,提问作者Sofie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 07:54:34