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

Python将数值列表写入CSV新增列时触发整数不可迭代报错求助

报错根因拆解
  • 第一种实现报错原因:循环遍历取到的x是整数类型的索引值,writerows()方法要求传入可迭代对象作为行内容,直接把单个整数传入会触发“整数类型必须可迭代”的报错;且打开文件时用w+模式会直接清空原CSV的所有已有内容,从根源上就无法实现“在现有结构上加新列”的目标。
  • 第二种实现报错原因:直接将整数列表pricelist传给writerows()时,方法会把列表内的每个单个整数当成独立行的内容来解析,单个整数不是可迭代对象,因此触发“需要可迭代对象,而非整数类型”的报错。
  • 核心调用误区:没有区分writerow()和writerows()的使用场景——writerow()用于写入单一行内容,要求传入单行的可迭代结构;writerows()用于批量写入多行内容,要求传入嵌套的可迭代结构(每个子元素对应一行内容)。
可落地的新列写入方案

实施前提:先确认pricelist的元素个数,与原CSV的有效数据行(不含表头)数量完全匹配,避免行值错位

方案1:使用Python内置csv模块实现(无需额外依赖)

逻辑流程:全量读取原CSV内容 → 给表头追加新列名 → 逐行拼接对应位置的pricelist值 → 全量写回文件
对应实现代码:

import csv

# 全量读取原CSV内容
with open('AB_NYC_2019.csv', 'r', newline='', encoding='utf-8') as f:
    csv_reader = csv.reader(f)
    all_rows = list(csv_reader)  # 列表第一个元素为表头,其余为数据行

# 追加新列表头
all_rows[0].append('calculated_price')

# 逐行追加对应pricelist值
for row_idx, row_content in enumerate(all_rows[1:]):
    row_content.append(str(pricelist[row_idx]))

# 将处理完成的内容写回文件
with open('AB_NYC_2019.csv', 'w', newline='', encoding='utf-8') as f:
    csv_writer = csv.writer(f)
    csv_writer.writerows(all_rows)

方案2:使用pandas实现(代码更简洁,适合中等数据量场景)

无需手动处理行列匹配、读写流的边界问题,仅需核心逻辑即可完成新列写入:

import pandas as pd

# 读取原CSV为DataFrame结构
price_df = pd.read_csv('AB_NYC_2019.csv')
# 直接将pricelist赋值为新列
price_df['calculated_price'] = pricelist
# 写回原文件,关闭自动生成的行索引避免多余空列
price_df.to_csv('AB_NYC_2019.csv', index=False, encoding='utf-8')

内容的提问来源于stack exchange,提问作者gmelgkermglermgmrelkgm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 10:36:01