首页 > 解决方案 > 在特定索引上将 TB 转换为 GB

问题描述

我写了这样一个代码。在这里,我想将构成 TB 和 GB 的所有列更改为单个整数。例如,如果列有 2 TB,此代码将删除 TB 并将其保持为 2。该程序运行良好。现在我想做的是将 2TB 转换为 2048 GB,以便我可以对所有列值求和。有什么办法可以同时去除 TB 并对特定行进行计算?

def removeend():
df= pd.read_csv('ExportList.csv')
if df["Used Space"].str.contains("GB | TB").any() or df["Memory Size"].str.contains("GB | TB").any() or df["Host CPU"].str.contains("Hz|MHz|GHz").any():
    df['Used Space'] = df['Used Space'].str.replace(r'GB|TB', '', regex=True)
    df["Memory Size"] = df["Memory Size"].str.replace(r'GB|TB', '', regex=True)
    df['Host CPU'] = df['Host CPU'].str.replace(r'MHz|Hz|GHz', '', regex=True)
    df = df.convert_dtypes()
    df["Used Space"] = pd.to_numeric(df["Used Space"])
    df["Memory Size"] = pd.to_numeric(df["Memory Size"])
    df["Host CPU"] = pd.to_numeric(df["Host CPU"])
else:
    print("Error occured!!!")

return df

标签: pandas

解决方案


定义\创建自定义函数:

def converter(x):
    try:
        return pd.eval(x)
    except:
        return x

最后:

cols=["Used Space","Memory Size"]
df[cols]=df[cols].replace({'GB':'','TB':'*1024'},regex=True).applymap(converter)
df["Host CPU"]=df["Host CPU"].replace({'MHz':'','GHz':'*0.001','Hz':'*0.000001'},regex=True).map(converter)

推荐阅读