在pandas数据框

时间:2017-10-30 21:26:34

标签: python regex pandas

我在pandas数据框中有一个列,如下所示。列名为ABC

ABC
Fuel
FUEL
Fuel_12_ab
Fuel_1
Lube
Lube_1
Lube_12_a
cat_Lube

现在我想使用下面的正则表达式替换此列中的值

ABC
Fuel
FUEL
Fuel
Fuel
Lube
Lube
Lube
cat_Lube

我们如何在pandas数据框中进行这种类型的字符串匹配。

3 个答案:

答案 0 :(得分:4)

In [63]: df.ABC.str.replace(r'_\d+.*', r'')
Out[63]:
0        Fuel
1        FUEL
2        Fuel
3        Fuel
4        Lube
5        Lube
6        Lube
7    cat_Lube
Name: ABC, dtype: object

答案 1 :(得分:3)

使用str.extract替换Alt:

df.ABC.str.extract('^(.*?)(?=_\d|$)', expand=False)

0        Fuel
1        FUEL
2        Fuel
3        Fuel
4        Lube
5        Lube
6        Lube
7    cat_Lube
Name: ABC, dtype: object

延伸礼貌piRSquared:

df.ABC.str.extract('(.*(?<=lube|fuel)).*', re.IGNORECASE, expand=False)

0        Fuel
1        FUEL
2        Fuel
3        Fuel
4        Lube
5        Lube
6        Lube
7    cat_Lube
Name: ABC, dtype: object

答案 2 :(得分:3)

在忽略大小写的情况下,为lubefuel使用正面的lookbehind。

import re
import pandas as pd

pat = re.compile('(?<=lube|fuel)_', re.IGNORECASE)

df.assign(ABC=[re.split(pat, x, 1)[0] for x in df.ABC])

        ABC
0      Fuel
1      FUEL
2      Fuel
3      Fuel
4      Lube
5      Lube
6      Lube
7  cat_Lube