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

如何用Pandas将多单位比例值统一转换为g/ml格式?

Pandas实现单位转换解决方案

原始数据

import pandas as pd

s = pd.Series(['3.95/kg', '3.30/kg', '3.49/kg', '3.96/g', '8.49/kg', '3.19/kg',
       '0.0154/g', '8.98/kg', '6.35/kg', '5.79/kg', '3.79/kg', '6.59/kg',
       '3.50/kg', '3.85/kg', '3.55/kg', '5.59/kg', '5.98/kg', '0.0152/g',
       '5.99/kg', '3.20/gr', '8.99/kg', '16.90/kg', '4.29/kg',
       '0.0128/g', '5.29/kg', '3.39/kg', '6.29/kg', '4.59/kg',
       '28.90/kg', '4.69/kg', '0.0389/gr', '0.0099/ml', '0.0608/g',])

转换规则

  • 单位为/kg:数值除以1000,单位改为/g
  • 单位为/g或/gr:数值不变,统一单位为/g
  • 单位为/ml:数值和单位保持不变
  • 单位为/l:数值除以1000,单位改为/ml

实现步骤及代码

方法1:向量化处理(高效推荐)

利用Pandas和Numpy的向量化操作,避免逐行遍历,提升处理效率:

import numpy as np

# 拆分数值与单位为两列
df = s.str.split('/', expand=True)
df.columns = ['value', 'unit']
df['value'] = df['value'].astype(float)

# 计算新数值
df['new_value'] = np.where(
    df['unit'] == 'kg', df['value'] / 1000,
    np.where(df['unit'] == 'l', df['value'] / 1000, df['value'])
)

# 确定新单位
df['new_unit'] = np.where(
    df['unit'] == 'kg', 'g',
    np.where(df['unit'].isin(['g', 'gr']), 'g',
             np.where(df['unit'] == 'l', 'ml', df['unit']))
)

# 合并数值与单位,保留对应精度
def format_result(row):
    if row['unit'] in ['kg', 'l']:
        return f"{row['new_value']:.5f}/{row['new_unit']}"
    else:
        return f"{row['new_value']}/{row['new_unit']}"

result = df.apply(format_result, axis=1)

方法2:逐行处理(直观易读)

如果数据量不大,用apply逐行处理逻辑更直观:

# 拆分数值与单位
df = s.str.split('/', expand=True)
df.columns = ['value', 'unit']
df['value'] = df['value'].astype(float)

# 定义处理函数
def process_unit(row):
    value = row['value']
    unit = row['unit']
    if unit == 'kg':
        return f"{value/1000:.5f}/g"
    elif unit in ['g', 'gr']:
        return f"{value}/g"
    elif unit == 'ml':
        return f"{value}/ml"
    elif unit == 'l':
        return f"{value/1000:.4f}/ml"
    else:
        # 兼容未知单位,保持原格式
        return f"{value}/{unit}"

result = df.apply(process_unit, axis=1)

结果示例

处理后的结果前几项如下:

pd.Series(['0.00395/g','0.00330/g','0.00349/g','3.96/g','0.00849/g', ...])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:14:57