我正在尝试插入从日期列获得的数据。 csv 文件中的列标题为 date,day,month,year,pcp1,pcp2,pcp3,pcp4,pcp5,pcp6
。 日、月、年
列当前为空。
我想将通过分割方法从日期获得的数据插入到这些列中。我怎样才能做到这一点?
以下是 csv 文件中的示例数据:
date day month year pcp1 pcp2 pcp3 pcp4 pcp5 pcp6
1.01.1979 0.431 2.167 9.375 0.431 2.167 9.375
2.01.1979 1.216 2.583 9.162 1.216 2.583 9.162
3.01.1979 4.041 9.373 23.169 4.041 9.373 23.169
4.01.1979 1.799 3.866 8.286 1.799 3.866 8.286
5.01.1979 0.003 0.051 0.342 0.003 0.051 0.342
6.01.1979 2.345 3.777 7.483 2.345 3.777 7.483
7.01.1979 0.017 0.031 0.173 0.017 0.031 0.173
这是我的代码:
import csv
dd=[]
mm=[]
yy=[]
with open('output2.csv') as csvfile:
reader = csv.DictReader(csvfile, fieldnames=("date","day","month","year","pcp1","pcp2","pcp3","pcp4","pcp5","pcp6"), delimiter=';', quotechar='|')
next(reader) # skip header row
x = [row['date'] for row in reader]
for date_str in x:
day, month, year = date_str.split('.')
dd.append(day)
mm.append(month)
yy.append(year)
csvfile.close()
with open('output2.csv') as f:
fieldnames = ["date","day","month","year","pcp1","pcp2","pcp3","pcp4","pcp5","pcp6"]
writer = csv.DictWriter(f, fieldnames=fieldnames,delimiter=';', quotechar='|')
for i in range(len(dd)):
writer.writerow({'day':dd[i]})
for i in range(len(mm)):
writer.writerow({'month':mm[i]})
for i in range(len(yy)):
writer.writerow({'year':yy[i]})
f.close()
最佳答案
您可以按如下方式解析 CSV。这会将所有行读取到列表中,然后将日期部分插入到空列中。
import csv
with open('output2.csv', newline='') as f_input:
csv_input = csv.reader(f_input, delimiter=';', quotechar='|')
header = next(csv_input)
rows = list(csv_input)
with open('output2b.csv', 'w', newline='') as f_output:
csv_output = csv.writer(f_output, delimiter=';', quotechar='|')
csv_output.writerow(header)
for row in rows:
day, month, year = row[0].split('.')
row[1:4] = [day, month, year]
csv_output.writerow(row)
为您提供以下输出:
date;day;month;year;pcp1;pcp2;pcp3;pcp4;pcp5;pcp6
1.01.1979;1;01;1979;0.431;2.167;9.375;0.431;2.167;9.375
2.01.1979;2;01;1979;1.216;2.583;9.162;1.216;2.583;9.162
3.01.1979;3;01;1979;4.041;9.373;23.169;4.041;9.373;23.169
4.01.1979;4;01;1979;1.799;3.866;8.286;1.799;3.866;8.286
5.01.1979;5;01;1979;0.003;0.051;0.342;0.003;0.051;0.342
6.01.1979;6;01;1979;2.345;3.777;7.483;2.345;3.777;7.483
7.01.1979;7;01;1979;0.017;0.031;0.173;0.017;0.031;0.173
使用 Python 3.5.2 进行测试
关于python - 在 csv 文件的特定列中插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39329274/