如何使用 Python 将新列附加到 CSV 文件?

Akh*_*ali 5 python csv

我在一个数组中存储了一组四个数字,我想将其添加到“分数”列下的 CSV 文件中。

with open('Player.csv', 'ab') as csvfile:
    fieldnames = ['Score']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()
    for i in range(0, l):
       writer.writerow({'Score': score[i]})
Run Code Online (Sandbox Code Playgroud)

它附加到文件中,但这会添加一个新行而不是新列。有人可以指导将其附加到新列中吗?

Ale*_*agh 6

可能最简单的解决方案是使用Pandas。这有点矫枉过正,但对于超出直接读取/写入范围的 CSV 操作来说,它通常要干净得多。

假设我有一个 CSV 文件,如下所示:

ASSETNUM    ASSETTAG    ASSETTYPE   AUTOWOGEN
cent45  9164        0
cent45  9164        0
Run Code Online (Sandbox Code Playgroud)

然后,添加列的相关代码如下:

import pandas as pd

df = pd.read_csv('path/to/csv.csv', delimiter='\t')
# this line creates a new column, which is a Pandas series.
new_column = df['AUTOWOGEN'] + 1
# we then add the series to the dataframe, which holds our parsed CSV file
df['NewColumn'] = new_column
# save the dataframe to CSV
df.to_csv('path/to/file.csv', sep='\t')
Run Code Online (Sandbox Code Playgroud)

这增加了一个新列,缩放良好,并且易于使用。生成的 CSV 文件如下所示:

    ASSETNUM    ASSETTAG    ASSETTYPE   AUTOWOGEN   NewColumn
0   cent45  9164        0   1
1   cent45  9164        0   1
Run Code Online (Sandbox Code Playgroud)

将此与出于相同目的的 CSV 模块代码进行比较(从此处修改):

with open('path/to/csv.csv', 'r') as fin:
    reader = csv.reader(fin, delimiter='\t')
    with open('new_'+csvfile, 'w') as fout:
        writer = csv.writer(fout, delimiter='\t')
        # set headers here, grabbing headers from reader first
        writer.writerow(next(reader) + ['NewColumn']

        for row in reader:
            # use whatever index for the value, or however you want to construct your new value
            new_value = reader[-1] + 1
            row.append(new_value)
            writer.writerow(row)
Run Code Online (Sandbox Code Playgroud)