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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:50:25