Python读取CSV转int后仍报'str'和'str'相减TypeError问题求助
错误原因
- 你之前转好的
int类型的profit变量被后续的内层循环for profit in row:覆盖了:row是当前行的原生字符串列表,元素分别为日期字符串、未转换的利润字符串,遍历过程中profit会被重新赋值为字符串类型的行元素,所以后续做减法运算时会报错类型不匹配。 - 你的计算逻辑本身也有问题:月度环比是当前行和上一行的利润做对比,不需要在单条行记录内部做循环遍历,多余的内层循环还会导致每条行记录被重复追加多次无效的计算结果。
修复方案
你需要单独缓存上一行的利润值用于环比计算,删除多余的内层循环即可,修改后代码如下:
import csv csv_path = "替换为你的CSV文件实际路径" with open(csv_path, 'r') as csvfile: csvreader = csv.reader(csvfile, delimiter =',') header = next(csvreader) # 追加新列表头 header.append('Net Change') header.append('Monthly Average Change') # 存储所有处理后的行数据,先存入表头 result_rows = [header] # 缓存上个月的利润值,初始为None区分第一个月 last_profit = None for row in csvreader: month = row[0] profit = int(row[1]) if last_profit is None: # 第一个月没有上一个月的数据,可按需求填0或空值 net_change = 0 percent_change = 0 else: net_change = profit - last_profit percent_change = net_change / last_profit # 把计算结果追加到当前行 row.append(net_change) row.append(percent_change) result_rows.append(row) # 更新上个月利润为当前月利润,供下一行计算使用 last_profit = profit # 如果需要把结果写入新的CSV文件,可以放开下面的注释 # with open('计算结果.csv', 'w', newline='') as f: # writer = csv.writer(f) # writer.writerows(result_rows)
注意事项
- 你原有逻辑里的
beginning_balance - ending_balance是用上月利润减当月利润,得到的是负的增长值,可以根据自己的业务需求调整计算顺序。 - 如果你的利润列包含$符号、千位分隔符等非数字字符,转
int前需要先做字符清理,避免类型转换报错。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

