CSV数据集运算报错:TypeError: unsupported operand type(s) for +: 'int' and 'str'求解
解决Pandas加权平均计算中的TypeError问题
问题场景
CSV文件结构:
criteria1,criteria2,criteria3 5,3,4 3,5,2
用于计算加权平均的Pandas代码:
import pandas as pd # 读取CSV文件 df = pd.read_csv('data.csv') # 定义权重 weights = [0.3, 0.4, 0.3] # 计算加权平均 df['average_weighting'] = df.apply(lambda x: (x[0]*weights[0] + x[1]*weights[1] + x[2]*weights[2]) / sum(weights), axis=1)
执行时出现错误:
TypeError: unsupported operand type(s) for +: 'int' and 'str'
错误原因
这个错误说明你的DataFrame中存在字符串类型的列,导致数值运算时字符串与整数/浮点数无法相加。通常是Pandas读取CSV时自动推断列类型出错,或者CSV文件中隐藏了非数字字符(比如空格、特殊符号)。
解决方案
1. 读取CSV时强制指定数值类型
在pd.read_csv中通过dtype参数直接指定列的数值类型,从根源避免类型错误:
# 指定每一列的类型为整数 df = pd.read_csv('data.csv', dtype={'criteria1': int, 'criteria2': int, 'criteria3': int}) # 或者统一指定为浮点数(更通用) df = pd.read_csv('data.csv', dtype=float)
2. 转换已读取列的类型为数值型
如果已经读取了数据,先检查列类型,再转换为数值类型:
# 先查看当前各列的数据类型 print(df.dtypes) # 将目标列转换为数值类型,无法转换的内容会被设为NaN df[['criteria1', 'criteria2', 'criteria3']] = df[['criteria1', 'criteria2', 'criteria3']].apply(pd.to_numeric, errors='coerce') # 处理可能出现的NaN值(根据需求选择) df = df.fillna(0) # 用0填充NaN # 或者 df = df.dropna() # 删除包含NaN的行
3. 优化加权平均计算(更高效的方式)
避免使用apply(性能较低),直接用向量运算实现加权平均,同时确保类型正确:
import numpy as np weights = np.array([0.3, 0.4, 0.3]) # 直接对列进行矩阵运算,计算加权和 df['average_weighting'] = (df[['criteria1', 'criteria2', 'criteria3']] * weights).sum(axis=1) / weights.sum()
由于这里权重总和为1,也可以简化为:
df['average_weighting'] = (df[['criteria1', 'criteria2', 'criteria3']] * weights).sum(axis=1)
内容的提问来源于stack exchange,提问作者Reetu Singh
相关产品推荐
相关产品推荐

