从字符串提取q后连续数字及百万行DataFrame高效处理问题
解决方案
针对你的两个问题,我整理了高效且精准的处理方案:
1. 提取q后紧跟的连续数字
要精准捕获q之后的连续数字(直到遇到非数字字符停止),可以用正则表达式配合pandas的str.extract方法。这里用到的正则是r'q(\d+)',拆解一下:
q:匹配固定字母q(\d+):捕获一个或多个连续的数字(这部分就是我们需要提取的内容)
str.extract会自动提取捕获组的内容,没有匹配到q的行会返回NaN,后续我们再把这些空值转为0即可。
2. 高效处理百万行数据
你原来的for循环在百万行数据上会非常低效——Python层面的逐行循环开销极大。而pandas的字符串方法都是矢量化操作(底层用C实现批量处理),效率能提升几个数量级,同时代码更简洁易读。
完整代码
# 提取q后的连续数字,无匹配则返回NaN df['AmountPaid'] = df['Product'].str.extract(r'q(\d+)', expand=False) # 将空值替换为0,并转换为整数类型 df['AmountPaid'] = df['AmountPaid'].fillna(0).astype(int)
效果验证
运行后你的DataFrame会完全符合预期:
| Product | AmountPaid |
|---|---|
| none | 0 |
| q1 | 1 |
| q123 | 123 |
| q12_a123 | 12 |
效率优势说明
- 矢量化操作一次性处理整列数据,避免了Python循环的逐行判断开销
- 代码逻辑更清晰,减少了手动循环可能出现的索引错误或性能瓶颈
内容的提问来源于stack exchange,提问作者alinpaca
相关产品推荐
相关产品推荐

