在csv Python中添加中间列

时间:2015-04-20 16:36:12

标签: python python-2.7 csv

我使用csv文件,似乎python为处理csv文件提供了很大的灵活性。

我发现了几个与我的问题相关的问题,但我无法弄清楚如何有效地组合解决方案......

我的起点CSV文件如下所示(注意'标题'行中只有1列):

FILE1
Z1 20 44 3
Z1 21 44 5
Z1 21 44 8
Z1 22 45 10

我想要做的是在第1列和第2列之间添加一列,并保持其余部分不变。此新列与其他列具有相同的#行,但对于所有条目包含相同的整数(在下面的示例中为10)。另一个重点是我真的不知道行数,所以我可能不得不先计算#行(?)我的输出应该是这样的:

FILE1
Z1 10 20 44 3
Z1 10 21 44 5
Z1 10 21 44 8
Z1 10 22 45 10

这有一个简单的解决方案吗?

5 个答案:

答案 0 :(得分:3)

我认为最简单的解决方案是只读取每一行并在新文件中写入相应的新行(带有插入的值):

import csv
with open('input.csv', 'r') as infile:
     with open('output.csv', 'w') as outfile:
         reader = csv.reader(infile, delimiter=' ')
         writer = csv.writer(outfile, delimiter=' ')
         for row in reader: 
             new_row = [row[0], 10]
             new_row += row[1:]
             writer.writerow(new_row)

但是,除了这个批量处理之外,如果你没有对数据做任何其他事情,这可能没有意义。如果是这种情况,你会想要查看csv库。

答案 1 :(得分:3)

使用pandas将csv文件导入为DataFrame df,然后使用df.insert(idx, col_name, value);其中idx是新创建的列的索引,col_name是您为此列指定的名称,value是您希望分配给列的值列表。见下图:

import pandas as pd

prices = pd.read_csv('C:\\Users\\abdou.seck\\Documents\\prices.csv')

prices

## Output
  Shares  Number  Prices
0    AAP     100  100.67
1   MSFT      50   56.50
2    SAN     200   19.18
3   GOOG     300  500.34

prices.insert(3, 'Total', prices['Number']*prices['Prices'])

prices

## Output:
  Shares  Number  Prices   Total
0    AAP     100  100.67   10067
1   MSFT      50   56.50    2825
2    SAN     200   19.18    3836
3   GOOG     300  500.34  150102

希望这有帮助。

答案 2 :(得分:1)

将数据拉入list,将每行的数据插入所需的位置,然后重新写入数据。

import csv

data_to_add = 10    
new_column_index = 1   # 0 based index

with open('FILE1.csv','r') as f:
    csv_r = csv.reader(f,delimiter=' ')
    data = [line for line in csv_r]

for row in data:
    row.insert(new_column_index,data_to_add)

with open('FILE1.csv','w') as f:
    csv_w = csv.writer(f,delimiter=' ')
    for row in data:
        csv_w.write(row)

答案 3 :(得分:1)

首先阅读标题,然后初始化阅读器,首先编写标题,然后初始化编写者:

import csv

with open("in.csv", "rb") as in_file:
    header = in_file.readline()
    csv_file_in = csv.reader(in_file, delimiter=" ")
    with open("out.csv","wb") as out_file:
        out_file.write(header)
        csv_file_out = csv.writer(out_file, delimiter=" ")
        for row in csv_file_in:
            csv_file_out.writerow([row[0], 10] + row[1:])

答案 4 :(得分:0)

以下是我如何用熊猫做的事情:

import pandas as pd

with open("in.csv") as input_file:
    header = input_file.readline()
    data = pd.read_csv(input_file, sep=" ")

data.insert(1, "New Data", 10)

with open("out.csv", "w") as output_file:
    output_file.write(header)
    data.to_csv(output_file, index=False, header=False)