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

如何在Pandas列中提取特定格式值并生成独立新列?

解决方案:提取符合格式的P#.S#内容到独立列

核心思路

因为目标字符串在Connections列中的位置不固定,直接按空格拆分无法精准定位,正则表达式是最优方案——它可以直接从整段字符串中匹配符合P1-12.S1-112格式的内容,自动排除不符合规则的项(比如P105.H10)。

正则表达式定义

针对需求的匹配规则,使用以下正则:

P([1-9]|1[0-2])\.S([1-9]|[1-9]\d|1[01][0-9]|11[0-2])

各部分含义:

  • P([1-9]|1[0-2]):匹配P后跟随1-12的数字(覆盖1-9、10、11、12)
  • \.:匹配点号(转义处理,避免正则将点号识别为通配符)
  • S([1-9]|[1-9]\d|1[01][0-9]|11[0-2]):匹配S后跟随1-112的数字(覆盖1-9、10-99、100-111、112)

Pandas 代码实现

单匹配项提取(每个Connections仅一个符合项)

import pandas as pd

# 示例DF1数据
df1 = pd.DataFrame({
    'Name': ['SIGNAL 1', 'SIGNAL 2'],
    'Connections': ['DF62.1 P8.S12 P105.H10 RK121.2', 'P3.S45 X99.0 P12.S112']
})

# 定义正则模式
pattern = r'P([1-9]|1[0-2])\.S([1-9]|[1-9]\d|1[01][0-9]|11[0-2])'

# 提取匹配内容到新列
df1['Matched_PS'] = df1['Connections'].str.extract(pattern).apply(
    lambda x: f'P{x[0]}.S{x[1]}' if pd.notna(x[0]) else None, axis=1
)

多匹配项提取(每个Connections含多个符合项)

如果存在一个Connections字符串里有多个符合规则的P#.S#,可以用str.findall提取所有匹配项,再用分隔符拼接:

df1['Matched_PS'] = df1['Connections'].str.findall(pattern).apply(
    lambda x: ', '.join([f'P{a}.S{b}' for a, b in x]) if x else None
)

复用处理DF2

DF2的处理逻辑完全一致,直接套用上述代码即可:

# 示例DF2数据
df2 = pd.DataFrame({
    'Connections': ['D101.1 K154A.4 P8.S12', 'P5.S78 P10.S100 Z200.3']
})

df2['Matched_PS'] = df2['Connections'].str.findall(pattern).apply(
    lambda x: ', '.join([f'P{a}.S{b}' for a, b in x]) if x else None
)

效果说明

运行代码后,新列Matched_PS会精准提取所有符合规则的内容,自动忽略P105.H10这类不符合P后数字≤12的项,且不受目标字符串在Connections中的位置影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:42:42