【问题标题】:Add a Column to an existing CSV file with Python使用 Python 将列添加到现有 CSV 文件
【发布时间】:2017-03-06 21:11:40
【问题描述】:

我正在尝试使用 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'})

【问题讨论】:

  • 'with' 语句后的某些行不是缩进了吗?
  • 要添加列,您必须将所有 csv 读取到内存中,在内存中添加列,然后再次保存所有文件。 'a' 表示append,但只能附加在文件末尾。

标签: python python-2.7 csv import


【解决方案1】:

最简单的方法是重写输出文件

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'模式还有其他原因吗?否则一个很好的答案。
  • @Chris Kenyon 我假设您的意思是 writer.writerow 而不是 writer.write
【解决方案2】:

如果使用 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 开始到我的列表末尾,因此它可能会枚举列表的索引。
猜你喜欢
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 2013-03-27
相关资源
最近更新 更多