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

pandas按下划线分割文件名加列时报int() base10转换错误如何解决

错误原因
  • 代码逻辑和需求不匹配:你需要提取的是下划线之后、.jpg后缀之前的数值,但当前代码里img_name.split("_")[0]取的是下划线前的第一段内容,报错信息中的combined就是文件名第一段的内容,自然无法转换为整数
  • 缺少后缀处理步骤:即使正确取到下划线后的内容,也会携带.jpg后缀,直接转整数也会触发格式错误
解决方法

方法1:修正原有分割逻辑

适合文件名格式固定为[前缀]_[数值].jpg、仅包含一个下划线的场景:

master_df['age'] = master_df['filename'].map(
    lambda img_name : np.uint8(
        img_name.split("_")[1] # 取下划线后的第一段内容
        .replace(".jpg", "") # 移除.jpg后缀
    )
)

方法2:正则提取(更推荐)

容错性更高,不受文件名前缀下划线数量、后缀大小写影响,直接匹配目标数值:

# 正则规则:匹配下划线后的连续数字,直到遇到.jpg为止
master_df['age'] = master_df['filename'].str.extract(r'_(\d+)\.jpg').astype(np.uint8)
可选异常处理

如果存在部分不符合命名规则的文件,可提前过滤避免运行报错:

# 筛选符合「前缀_数字.jpg」格式的文件
valid_file_mask = master_df['filename'].str.match(r'^.*_\d+\.jpg$', na=False)
print(f"过滤不符合规则的文件数量:{ (~valid_file_mask).sum() }")
# 仅为合规文件赋值age
master_df.loc[valid_file_mask, 'age'] = master_df.loc[valid_file_mask, 'filename'].str.extract(r'_(\d+)\.jpg').astype(np.uint8)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:09:00