使用Python向现有的CSV文件添加一列

4
我正在尝试使用Python向现有的csv文件添加新的列标题和值。我查找的所有信息都将标题追加到最后一列的最后一行,但这并不是我想要的结果。下面是我想要的结果:
Header Header2 Header3 NewHeader Value Value2 Value3 NewValue 而实际上我得到的是:
Header   Header2   Header3
Value    Value2    Value3**NewHeader
NewValue`

这是我的代码:
import csv
  with open('filename.csv', 'a') as csvfile:
  fieldnames = ['pageviewid']
  writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

  writer.writeheader()
  writer.writerow({'pageviewid': 'Baked'})
  writer.writerow({'pageviewid': 'Lovely'})
  writer.writerow({'pageviewid': 'Wonderful'})

1
在“with”语句之后的至少一些行不是缩进的吗? - Tom Barron
要添加列,您必须将所有CSV文件读入内存,在内存中添加列,然后再次保存所有文件。 'a'表示追加,但它只能在文件末尾追加。 - furas
2个回答

4
如果可以使用pandas:
import pandas as pd
df = pd.read_csv('filename.csv')
new_column = pd.DataFrame({'new_header': ['new_value_1', 'new_value_2', 'new_value_3']})
df = df.merge(new_column, left_index = True, right_index = True)
df.to_csv('filename.csv', index = False)

使用这种方法,一个新的列会添加到我的数据左侧。剩下的代码是有效的,你知道我怎么才能去掉这一列吗?它从0开始到我的列表的末尾,所以很可能是在枚举列表的索引。 - duldi

2
最简单的方法是将内容重写到输出文件中。
import csv
reader = csv.reader(open('filename.csv', 'r'))
writer = csv.writer(open('output.csv', 'w'))
headers = reader.next()
headers.append("Brand New Awesome Header")
writer.writerow(headers)
for row in reader:
    row.append(new data for my new header)
    writer.writerow(row)

你不需要以二进制模式读取文本文件。 'rb' 模式还有其他原因吗?否则是一个很好的答案。 - WombatPM
2
@Chris Kenyon 我猜你是指 writer.writerow 而不是 writer.write - oba2311

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接