我正在尝试为我的CSV文件添加标题。
我从.csv文件导入数据,该文件有两列数据,每列包含浮点数。例如:
11 22
33 44
55 66
现在我想为两列添加标题,如:
ColA ColB
11 22
33 44
55 66
我试过这个:
with open('mycsvfile.csv', 'a') as f:
writer = csv.writer(f)
writer.writerow(('ColA', 'ColB'))
我使用'a'
来附加数据,但这会在文件的底行而不是第一行中添加值。有什么办法可以解决吗?
答案 0 :(得分:18)
一种方法是读取所有数据,然后用标题覆盖文件并再次写出数据。对于大型CSV文件,这可能不实用:
#!python3
import csv
with open('file.csv',newline='') as f:
r = csv.reader(f)
data = [line for line in r]
with open('file.csv','w',newline='') as f:
w = csv.writer(f)
w.writerow(['ColA','ColB'])
w.writerows(data)
答案 1 :(得分:7)
我认为您应该使用pandas来读取csv文件,插入列标题/标签,然后发出新的csv文件。假设您的csv文件是逗号分隔的。这样的事情应该有效:
from pandas import read_csv
df = read_csv('test.csv')
df.columns = ['a', 'b']
df.to_csv('test_2.csv')
答案 2 :(得分:2)
我知道这个问题已经问了很久了。但是对于其他在这个问题上绊脚石的人,这里是Python的替代品。
如果您有权使用sed(如果您使用的是Linux或Mac,则可以执行此操作;您也可以在Windows 10上下载Ubuntu Bash,并且sed随附了sed),则可以使用以下代码:
sed -i 1i"ColA,ColB" mycsvfile.csv
-i将确保sed进行就地编辑,这意味着sed将覆盖文件头位于顶部的文件。这是有风险的。
如果您要创建一个新文件,请执行此操作
sed 1i"ColA,ColB" mycsvfile.csv > newcsvfile.csv
答案 3 :(得分:2)
对于CSV文件的第一行被标题替换的问题,我们需要添加一个选项。
import pandas as pd
df = pd.read_csv('file.csv', **header=None**)
df.to_csv('file.csv', header = ['col1', 'col2'])
答案 4 :(得分:1)
在这种情况下,您不需要CSV模块。您需要fileinput
模块,因为它允许就地编辑:
import fileinput
for line in fileinput.input(files=['mycsvfile.csv'], inplace=True):
if fileinput.isfirstline():
print 'ColA,ColB'
print line,
在上面的代码中,由于print
参数,inplace=True
语句将打印到文件中。
答案 5 :(得分:-1)
您可以在代码中将reader.fieldnames设置为列表 就像你的情况一样
with open('mycsvfile.csv', 'a') as fd:
reader = csv.DictReader(fd)
reader.fieldnames = ["ColA" , "ColB"]
for row in fd