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

如何将DataFrame中Bytes列的转换值覆盖回对应行?

解决Bytes列单位转换并覆盖原数据的问题

你当前的循环只是在临时变量i上做修改,根本没同步到原DataFrame里,所以原列不会有任何变化。下面给你几种可行的解决方法:

方法1:用apply函数(简洁直观)

写一个转换函数,用apply批量处理整列数据:

def convert_bytes(val):
    val_str = str(val)
    if "M" in val_str:
        return int(float(val_str.split()[0]) * 1000000)
    else:
        return int(val_str)

# 直接覆盖原列
df1['Bytes'] = df1['Bytes'].apply(convert_bytes)

方法2:向量化操作(推荐给大型DataFrame)

向量化操作比循环和apply效率高得多,适合你说的大型CSV场景:

# 筛选出带'M'的行
has_m = df1['Bytes'].str.contains('M', na=False)
# 处理带'M'的行:拆分取数值、转浮点、乘1000000
df1.loc[has_m, 'Bytes'] = df1.loc[has_m, 'Bytes'].str.split().str[0].astype(float) * 1000000
# 处理不带'M'的行:直接转整数
df1.loc[~has_m, 'Bytes'] = df1.loc[~has_m, 'Bytes'].astype(int)
# 统一把整列转成int类型
df1['Bytes'] = df1['Bytes'].astype(int)

方法3:循环修改(不推荐大型数据)

如果非要用循环,得通过索引定位到原DataFrame的行来修改:

for idx, val in df1['Bytes'].items():
    val_str = str(val)
    if "M" in val_str:
        df1.loc[idx, 'Bytes'] = int(float(val_str.split()[0]) * 1000000)
    else:
        df1.loc[idx, 'Bytes'] = int(val_str)

注意:如果你的数据里有NaN或者其他异常格式,记得提前做清理,避免转换报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 07:52:14