You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效处理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)

处理后结果示例

price2022companyprice2023
12219toyota10194
22018apple22018
32020general electric31020
80170alibaba83170

方案优势

  • 无需新建任何中间列,直接在原列完成数据转换
  • 通过列名自动匹配目标列,无需手动指定每一列
  • applymap基于Pandas向量化操作逻辑,效率远高于逐行循环处理

内容的提问来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 11:35:09