将带有正则表达式的函数应用于熊猫数据框

我有数据帧 df[2]的以下摘录:

    CAR DRIVER START   PIT 1    PIT 2     PIT 3     PIT 4     PIT 5
0    31    OCO    In  In (2)  C3n (3)  C2n (37)         0         0
1     5    VET    In  In (2)  C3n (3)  C2n (36)         0         0
2    44    HAM    In  In (2)  C3u (4)  C2n (19)  C3n (47)         0
3    55    SAI    In  In (2)  C3n (3)  C2n (32)         0         0
4    14    ALO    In  In (2)  C3n (3)  C2n (39)         0         0

我正在尝试更改 "PIT .." 列(从第 3 列开始,通过检查)值,例如从"C3n (3)""C3n-3"。我编写了以下代码来实现这一点:

df[2].iloc[:, 3:] = df[2].iloc[:, 3:].apply(lambda x: re.compile(r'\w+').findall(str(x))
              [0] + "-" + re.compile(r'\w+').findall(str(x))[1] if len(str(x)) > 1 else 0)

以下代码的输出是:

    CAR DRIVER START PIT 1  PIT 2  PIT 3 PIT 4 PIT 5
0    31    OCO    In  0-In  0-C3n  0-C2n   0-0   0-0
1     5    VET    In  0-In  0-C3n  0-C2n   0-0   0-0
2    44    HAM    In  0-In  0-C3n  0-C2n   0-0   0-0
3    55    SAI    In  0-In  0-C3n  0-C2n   0-0   0-0
4    14    ALO    In  0-In  0-C3n  0-C2n   0-0   0-0

,这是不正确的,因为所有列值都相同。我在 lambda 中实现的正则表达式在作为独立函数进行测试时是正确的,但当我将其应用于数据帧时则不正确。

这是我的数据帧切片的问题,因为这是我不确定的唯一问题吗?任何帮助,将不胜感激。

回答

您可以使用filter来选择PIT..列并像这样替换:

>>> df.filter(like='PIT').replace(r' \((\d+)\)', r'-\1', regex=True)
PIT 1  PIT 2   PIT 3   PIT 4  PIT 5
0  In-2  C3n-3  C2n-37       0      0
1  In-2  C3n-3  C2n-36       0      0
2  In-2  C3u-4  C2n-19  C3n-47      0
3  In-2  C3n-3  C2n-32       0      0
4  In-2  C3n-3  C2n-39       0      0

对于正则表达式,请参阅该文档的(\d+)\1


以上是将带有正则表达式的函数应用于熊猫数据框的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>