我使用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
这有一个简单的解决方案吗?
答案 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)