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
相关产品推荐
相关产品推荐

