pandas - 在特定索引上将 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
解决方案
定义\创建自定义函数:
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)
推荐阅读
- typescript - 如何从 Next.js 正确键入 _document.tsx 文件?
- javascript - 在用户不活动的情况下显示白页(即什么都没有),并在浏览器中选择选项卡时刷新页面
- python - 使用不同模型的 Django Rest Framework 中的嵌套序列化程序
- c - 如何使 GDB stepi 更快?
- html - 如何在 flex 布局中插入不同宽度的占位符?
- azure - ASP.NET CORE 5 - AD 身份验证
- javascript - 使元素可拖动以用于触摸屏
- visual-studio - 调试器显示不存在的对象属性
- android - 重复的 zip 条目 [classes.jar:android/support/v4/view/ViewPager$DecorView.class]
- python-3.x - 通过 Python 更新 sqlite 表中的特定列