如何在 pandas 列中查找值并将其设为自己的列,但该列未组织

问题描述 投票:0回答:1

所以我正在努力将一个数据帧的数据与另一个数据帧的数据进行比较。我的 CSV 格式如下。 DF1:

姓名 连接
信号1 DF62.1 P8.S12 P105.H10 RK121.2
信号2 DF57.1 P105.B4 P7.S5

DF2:

姓名 连接
信号1 D101.1 K154A.4 P8.S12
信号2 K140A.3 P7.S5

我想将 P8.S12 和 P7.S5 提取到其自己的列中。有什么想法如何提取该特定值吗?它始终是 P#.S# 值,其中 P# 介于 P1-P12 之间,S# 介于 S1-S112 之间。前任。 P1.S5、P4.S100、P3.S30...

我的另一个问题是在 DF1 SIGNAL 1 中,P105 不是我想要的 P1-12 是不应提取大于 12 的值。

我研究了带有空格分隔符的 split 函数,但由于该值在列中并不总是处于相同的顺序,我认为这不起作用。

python pandas dataframe split
1个回答
0
投票

您可以使用正则表达式和

str.extract
来匹配
PX.SY
,其中 X 是 1-12 之间的数字,Y 是 1-112:

pattern = r'(P(?:[1-9]|1[012])\.S(?:[1-9]|\d{2}|10\d|11[0-2]))'
df['new'] = df['Connections'].str.extract(pattern)

输出:

       Name                     Connections    new
0  SIGNAL 1  DF62.1 P8.S12 P105.H10 RK121.2  P8.S1
1  SIGNAL 2            DF57.1 P105.B4 P7.S5  P7.S5

注意。为某个范围生成正则表达式并不总是那么简单,您必须将模式分成块(例如,在 1-112 的情况下为 0-9 OR 10-19 OR 100-109 OR 110-112)。如果需要,可以使用在线工具来帮助您(这里是随机的)。

© www.soinside.com 2019 - 2024. All rights reserved.