如何在Python中为CSV文件新增列并写入指定列表数据
在Python中给CSV添加新列的实现方案
嘿,我给你准备了两种实用的方法来完成这个需求,一种用Python自带的标准库,不用额外装包;另一种用pandas,处理表格数据更高效——看你哪种顺手就用哪种~
先明确下你的需求:
原CSV内容:
A,Film, Yes B,Grass,No C,Bottle,No D,Love,Yes E,Red,No要追加的新列数据:
['No','No','Yes','Yes','No']
期望得到的最终CSV:A,Film, Yes,No B,Grass,No,No C,Bottle,No,Yes D,Love,Yes,Yes E,Red,No,No
方法一:用Python标准库csv(无需额外依赖)
这种方法适合不想安装第三方库的场景,完全用Python自带工具搞定:
代码示例
import csv # 情况1:如果你的CSV是本地文件 # 先读取原文件内容 original_rows = [] with open("original.csv", "r", newline="") as infile: reader = csv.reader(infile) original_rows = list(reader) # 情况2:如果你的CSV是内存中的字符串(像你给出的示例) # original_rows = [ # ['A', 'Film', ' Yes'], # ['B', 'Grass', 'No'], # ['C', 'Bottle', 'No'], # ['D', 'Love', 'Yes'], # ['E', 'Red', 'No'] # ] # 待添加的新列数据 new_column = ['No','No','Yes','Yes','No'] # 把新列的每个元素对应追加到原每行后面 updated_rows = [row + [val] for row, val in zip(original_rows, new_column)] # 写入新的CSV文件 with open("updated.csv", "w", newline="") as outfile: writer = csv.writer(outfile) writer.writerows(updated_rows)
说明
- 用
csv.reader读取原文件的每一行,得到一个二维列表 - 用
zip把原行和新列的元素一一对应,通过列表推导式快速拼接成新行 - 最后用
csv.writer把新内容写入文件,newline=""是为了避免Windows系统下出现多余空行
方法二:用pandas库(简洁高效,适合数据处理场景)
如果平时经常处理表格数据,pandas绝对是你的好帮手,代码会更简洁:
步骤1:安装pandas(如果没装的话)
pip install pandas
代码示例
import pandas as pd from io import StringIO # 如果是处理字符串形式的CSV才需要 # 情况1:读取本地CSV文件 df = pd.read_csv("original.csv", header=None) # 因为原CSV没有表头,所以header=None # 情况2:处理字符串形式的CSV(像你给出的示例) # csv_str = """A,Film, Yes # B,Grass,No # C,Bottle,No # D,Love,Yes # E,Red,No""" # df = pd.read_csv(StringIO(csv_str), header=None) # 添加新列:因为原数据有3列,所以新列的索引是3(也可以自定义列名,比如df['new_col'] = new_column) new_column = ['No','No','Yes','Yes','No'] df[3] = new_column # 保存为新的CSV文件,不保留pandas自动生成的索引和表头 df.to_csv("updated.csv", index=False, header=False)
说明
pd.read_csv读取CSV内容,header=None告诉pandas原文件没有表头行- 直接通过列索引(或列名)给DataFrame追加新列,pandas会自动对应每行数据
to_csv时设置index=False和header=False,确保输出的CSV和你期望的格式一致
内容的提问来源于stack exchange,提问作者JFroz
相关产品推荐
相关产品推荐

