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

如何修改现有Pandas代码实现指定列TB转GB统一单位后可直接求和

单位换算优化实现方案

当然可以在移除单位的同时完成单位换算,我们可以通过正则分组同时捕获数值与单位,再按单位匹配换算系数计算即可,调整后的完整代码如下:

import pandas as pd

def removeend():
    df = pd.read_csv('ExportList.csv')
    # 校验列是否包含目标单位,修正原代码多余空格的匹配问题
    if df["Used Space"].str.contains(r"GB|TB").any() or df["Memory Size"].str.contains(r"GB|TB").any() or df["Host CPU"].str.contains(r"Hz|MHz|GHz").any():
        # 批量处理存储类列,统一转换为GB单位
        for col in ["Used Space", "Memory Size"]:
            # 分组捕获数值部分和单位部分
            df[[f"{col}_num", f"{col}_unit"]] = df[col].str.extract(r"(\d+\.?\d*)(GB|TB)", expand=True)
            # 转换数值类型
            df[f"{col}_num"] = pd.to_numeric(df[f"{col}_num"])
            # 按单位计算统一单位后的数值
            df[col] = df.apply(
                lambda x: x[f"{col}_num"] * 1024 if x[f"{col}_unit"] == "TB" else x[f"{col}_num"],
                axis=1
            )
            # 清理临时生成的辅助列
            df.drop(columns=[f"{col}_num", f"{col}_unit"], inplace=True)
        
        # 处理Host CPU列,直接提取数值部分,可按需补充CPU单位换算逻辑
        df["Host CPU"] = pd.to_numeric(df["Host CPU"].str.extract(r"(\d+\.?\d*)", expand=True))
        # 统一转换数据类型
        df = df.convert_dtypes()
    else:
        print("Error occured!!!")
    
    return df

主要改动说明

  • 修正原代码匹配bug:原str.contains规则中多余的空格会导致无法匹配无空格的单位标识,优化后已经移除空格
  • 新增单位换算逻辑:不再直接删除单位字符串,通过正则分组同时捕获数值和单位,判断为TB时乘以1024换算为GB,最终返回统一单位的数值
  • 代码复用性优化:批量处理两个存储类列,不需要重复写相同逻辑
  • CPU列处理简化:通过extract直接提取数值部分,比原替换所有单位的写法更简洁,若需要统一CPU单位可参照存储列的逻辑补充换算规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 22:09:04