首页 > 解决方案 > 带有正则表达式的熊猫用于计算列

问题描述

我从一个正则表达式开始,提取长度为 2 或更多的没有数字的字符串匹配,然后加入它们以创建一个新字段

import re
# testing regex here
part = '24C-435-SA'
part1 = '24CE-435-SA'
group = "-".join(re.findall(r'[A-za-z]{2,}', part))
group1 = "-".join(re.findall(r'[A-za-z]{2,}', part1))
print("Group:", group, "Group1:", group1)

结果是 Group: SA Group1: CE-SA

一切都很好,现在我正在尝试在熊猫数据框 df 上应用相同的正则表达式并遇到如下问题

        part    unit_price
0   24C-435-SA  10
1   30C-435-SB  20
2   36C-435-SC  30
3   42C-435-SD  40

现在我尝试新列:

df['group'] = "-".join(re.findall(r'[A-za-z]{2,}', str(df['part'])))

甚至不同的语法来避免一些熊猫警告:

df.loc[:, 'group'] = "-".join(re.findall(r'[A-za-z]{2,}', str(df['part'])))

我明白了:

        part    unit_price                group
0   24C-435-SA  10          SA-SB-SC-SD-Name-part-dtype-object
1   30C-435-SB  20          SA-SB-SC-SD-Name-part-dtype-object
2   36C-435-SC  30          SA-SB-SC-SD-Name-part-dtype-object
3   42C-435-SD  40          SA-SB-SC-SD-Name-part-dtype-object

我看到它不断将所有行匹配而不是预期值连接在一起:

    group
    SA
    SB
    SC
    SD

标签: pandasdataframe

解决方案


您可以尝试使用Series.str.findalland Series.str.join

>>> df['group'] = df['part'].str.findall(r'[A-za-z]{2,}').str.join('-')

推荐阅读