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

百分比编码出现TypeError错误,请求排查原因及解决方案

问题排查:百分比编码时出现字符串除法错误

之前对字符串变量执行百分比编码的代码可正常运行,重启内核后未修改任何代码和数据集,却抛出如下错误:

TypeError: unsupported operand type(s) for /: 'str' and 'str'

尝试将相关列转为int类型后仍出现新错误,怀疑与依赖版本变化有关,以下是排查原因及解决建议:

之前使用的代码

数据类型查看代码

df_train.info()

百分比编码代码

freq_oc = df_train['Occupation'].value_counts().reset_index()
freq_oc.rename(columns={'index':'Occupation','Occupation':'freq_Occupation'},inplace=True)

freq_oc['pct_Occupation']=round((freq_oc['freq_Occupation']/freq_oc['freq_Occupation'].sum())*100,2)
freq_oc

排查原因

  • 核心问题:freq_Occupation列的数据类型变为字符串,而非预期的数值类型,导致除法运算失败。
  • 可能触发因素:
    1. 数据集读取异常:重启内核后重新读取数据集时,Occupation列的异常值(如特殊字符、空占位符)被错误解析,使得value_counts()返回的计数列被自动转为字符串。
    2. pandas版本差异:不同pandas版本对value_counts()返回结果的类型处理逻辑有差异,环境中pandas版本更新可能引发此问题,而非Python版本直接导致。
    3. 转int操作不当:直接对整列执行astype(int)时,若存在无法转换的字符串值,会抛出新错误。

解决建议

  1. 先确认数据类型与异常值
    运行以下代码查看列类型及原始数据中的异常值:

    # 查看freq_oc各列数据类型
    print(freq_oc.dtypes)
    # 查看Occupation列的所有唯一值
    print(df_train['Occupation'].unique())
    
  2. 安全转换计数列为数值类型
    使用pd.to_numeric进行安全转换,自动处理无法转换的值:

    import pandas as pd
    
    # 转换为数值类型,无法转换的设为0,再转为int
    freq_oc['freq_Occupation'] = pd.to_numeric(freq_oc['freq_Occupation'], errors='coerce').fillna(0).astype(int)
    # 重新计算百分比
    freq_oc['pct_Occupation'] = round((freq_oc['freq_Occupation'] / freq_oc['freq_Occupation'].sum()) * 100, 2)
    
  3. 规范数据集读取逻辑
    读取数据集时指定Occupation列的类型,避免自动解析错误:

    df_train = pd.read_csv('credit_score_dataset.csv', dtype={'Occupation': str})
    
  4. 锁定依赖版本
    若确认是pandas版本问题,可固定之前正常运行的版本,在requirements.txt中添加:

    pandas==x.x.x
    

内容的提问来源于stack exchange,提问作者Amelia Putri Damayanti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 12:11:20