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

Python中ValueError: invalid literal for int() with base 10: ' '错误求助

解决笔记本Memory列类型转换报错问题

错误原因

触发ValueError: invalid literal for int() with base 10: ' '的核心问题:

  • 原代码仅替换了字符D,未彻底清理first和second列中的非数字内容(如HDD、SSD、空格等),导致部分单元格只剩空格或空字符串
  • 直接用astype(int)转换时,无法识别空/空格字符串,引发报错

修正后的代码

# preprocessing
df['Memory'] = df['Memory'].astype(str).replace('.0', '', regex=True)
df["Memory"] = df["Memory"].str.replace('GB', '')
df["Memory"] = df["Memory"].str.replace('TB', '000')
new = df["Memory"].str.split("+", n = 1, expand = True)

df["first"] = new[0].str.strip()  # 先去除首尾空格
df["second"] = new[1].fillna("0").str.strip()  # 填充空值为0并去空格

# 标记存储类型
df["Layer1HDD"] = df["first"].apply(lambda x: 1 if "HDD" in x else 0)
df["Layer1SSD"] = df["first"].apply(lambda x: 1 if "SSD" in x else 0)
df["Layer1Hybrid"] = df["first"].apply(lambda x: 1 if "Hybrid" in x else 0)
df["Layer1Flash_Storage"] = df["first"].apply(lambda x: 1 if "Flash Storage" in x else 0)

df["Layer2HDD"] = df["second"].apply(lambda x: 1 if "HDD" in x else 0)
df["Layer2SSD"] = df["second"].apply(lambda x: 1 if "SSD" in x else 0)
df["Layer2Hybrid"] = df["second"].apply(lambda x: 1 if "Hybrid" in x else 0)
df["Layer2Flash_Storage"] = df["second"].apply(lambda x: 1 if "Flash Storage" in x else 0)

# 彻底清理非数字字符:保留所有数字,去掉字母、符号、空格
df['first'] = df['first'].str.replace(r'\D', '', regex=True)
df['second'] = df['second'].str.replace(r'\D', '', regex=True)

# 处理空字符串:将空内容替换为0,再转换为整数
df['first'] = df['first'].replace('', '0').astype(int)
df['second'] = df['second'].replace('', '0').astype(int)

# 计算各存储类型的总容量
df["HDD"] = df["first"] * df["Layer1HDD"] + df["second"] * df["Layer2HDD"]
df["SSD"] = df["first"] * df["Layer1SSD"] + df["second"] * df["Layer2SSD"]
df["Hybrid"] = df["first"] * df["Layer1Hybrid"] + df["second"] * df["Layer2Hybrid"]
df["Flash_Storage"] = df["first"] * df["Layer1Flash_Storage"] + df["second"] * df["Layer2Flash_Storage"]

# 删除无用列
df.drop(columns=['first', 'second', 'Layer1HDD', 'Layer1SSD', 'Layer1Hybrid',
       'Layer1Flash_Storage', 'Layer2HDD', 'Layer2SSD', 'Layer2Hybrid',
       'Layer2Flash_Storage'], inplace=True)

关键修改点

  • 替换非数字字符时,使用\D正则表达式(匹配所有非数字内容),而非原代码的D,彻底清理字母、符号
  • 提前对first和second列执行str.strip(),去除首尾空格
  • 将空字符串替换为0后再转换为整数,避免转换失败
  • 移除了原代码中重复的二进制编码逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:35:01