百分比编码出现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列的数据类型变为字符串,而非预期的数值类型,导致除法运算失败。 - 可能触发因素:
- 数据集读取异常:重启内核后重新读取数据集时,
Occupation列的异常值(如特殊字符、空占位符)被错误解析,使得value_counts()返回的计数列被自动转为字符串。 - pandas版本差异:不同pandas版本对
value_counts()返回结果的类型处理逻辑有差异,环境中pandas版本更新可能引发此问题,而非Python版本直接导致。 - 转int操作不当:直接对整列执行
astype(int)时,若存在无法转换的字符串值,会抛出新错误。
- 数据集读取异常:重启内核后重新读取数据集时,
解决建议
先确认数据类型与异常值
运行以下代码查看列类型及原始数据中的异常值:# 查看freq_oc各列数据类型 print(freq_oc.dtypes) # 查看Occupation列的所有唯一值 print(df_train['Occupation'].unique())安全转换计数列为数值类型
使用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)规范数据集读取逻辑
读取数据集时指定Occupation列的类型,避免自动解析错误:df_train = pd.read_csv('credit_score_dataset.csv', dtype={'Occupation': str})锁定依赖版本
若确认是pandas版本问题,可固定之前正常运行的版本,在requirements.txt中添加:pandas==x.x.x
内容的提问来源于stack exchange,提问作者Amelia Putri Damayanti
相关产品推荐
相关产品推荐

