pandas - 带有正则表达式的熊猫用于计算列
问题描述
我从一个正则表达式开始,提取长度为 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
解决方案
您可以尝试使用Series.str.findall
and Series.str.join
:
>>> df['group'] = df['part'].str.findall(r'[A-za-z]{2,}').str.join('-')
推荐阅读
- c# - 如何使用 C# 连接到 Google Cloud Storage?
- c++ - 对象创建另一个实例而不是修改指向的实例
- xml - 如何用 xslt 实现 RSA-OAEP 算法
- powershell - 此 AD 清理脚本可以改进的地方
- asynchronous - 异步调用 API 时如何超时?
- r - 按组对时间序列进行线性脊柱插值
- scikit-learn - 如何使用加权 log_loss 作为 linear_model.SGDClassifier 的 SCORING 函数?
- java - 插入 sql db 失败,异常:java com.microsoft.sqlserver.jdbc.SQLServerException:必须声明标量变量“@P7@P8”
- angular - ng-material-multilevel-menu 在 Angular 7 中不起作用
- rust - 为什么胖指针有时会向外渗透?