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
相关产品推荐
相关产品推荐

