所以我正在努力将一个数据帧的数据与另一个数据帧的数据进行比较。我的 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 函数,但由于该值在列中并不总是处于相同的顺序,我认为这不起作用。
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)。如果需要,可以使用在线工具来帮助您(这里是随机的)。