如何高效处理Pandas中多列多行价格字符串的求和转换?
高效处理含换行与冗余字符的价格列求和问题
问题背景
现有如下Pandas DataFrame:
import pandas as pd data1 = [{'price2022': "12014\n205****", 'company': "toyota",'price2023': "10014\n180****"}, {'price2022': "22018", 'company': "apple",'price2023': "22018"}, {'price2022': "32020", 'company': "general electric",'price2023': "31020"}, {'price2022': "80170", 'company': "alibaba",'price2023': "83170"} ] df1 = pd.DataFrame(data1)
其中部分price开头的列值为包含换行符和冗余****的多行字符串,需要将这类值转换为各行数字的求和结果(例如"12014\n205****"需转为12014+205=12219)。要求实现无需新建多列、可自动处理所有相关列的高效方案。
解决方案
步骤1:定义字符串处理函数
编写一个专用函数,完成单个价格字符串的拆分、冗余清理与求和逻辑:
def calculate_total_price(s): # 按换行符拆分字符串为多个片段 segments = s.split('\n') total = 0 for seg in segments: # 移除****并去除首尾空白,提取纯数字字符串 clean_num = seg.replace('****', '').strip() # 转换为整数并累加 total += int(clean_num) return total
步骤2:自动匹配并批量处理目标列
通过列名筛选出所有以price开头的列,使用applymap批量应用上述函数,直接覆盖原列值,无需新建中间列:
# 筛选所有price开头的列 target_cols = [col for col in df1.columns if col.startswith('price')] # 批量处理目标列 df1[target_cols] = df1[target_cols].applymap(calculate_total_price)
处理后结果示例
| price2022 | company | price2023 |
|---|---|---|
| 12219 | toyota | 10194 |
| 22018 | apple | 22018 |
| 32020 | general electric | 31020 |
| 80170 | alibaba | 83170 |
方案优势
- 无需新建任何中间列,直接在原列完成数据转换
- 通过列名自动匹配目标列,无需手动指定每一列
applymap基于Pandas向量化操作逻辑,效率远高于逐行循环处理
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

