У меня есть CSV-файл выглядит следующим образом
year,gender,age,country
2002,F,9-10,CO
2002,F,9-10,CO
2002,M,9-10,CO
2002,F,9-10,BR
2002,M,11-15,BR
2002,F,11-15,CO
2003,F,9-10,CO
2003,M,9-10,CO
2003,F,9-10,BR
2003,M,9-10,CO
2004,F,11-15,BR
2004,F,11-15,CO
2004,F,9-10,BR
2004,F,9-10,CO
И я хочу получить выходной файл, как это:
year,gender,age,country,population
2002,F,9-10,CO,2
2002,M,9-10,CO,1
2002,F,9-10,BR,1
2002,M,9-10,BR,0
2002,F,11-15,CO,1
2002,M,11-15,CO,0
2002,F,11-15,BR,0
2002,M,11-15,BR,1
2003,F,9-10,CO,1
2003,M,9-10,CO,1
2003,F,9-10,BR,1
2003,M,9-10,BR,0
2003,F,11-15,CO,0
2003,M,11-15,CO,0
2004,F,9-10,CO,1
2004,M,9-10,CO,0
2004,F,9-10,BR,1
2004,M,9-10,BR,0
2004,F,11-15,CO,1
2004,M,11-15,CO,0
2004,F,11-15,BR,1
2004,M,11-15,BR,0
В основном я хочу распечатать число женщиндля каждого года, каждого возраста и каждой страны, таким образом, год, пол, возраст и страна будут ключом словаря. Более того, в каком-то году нет данных о конкретной стране, или в каком-то году нет определенного возраста для конкретной страны. Например, в 2003 году у женщин не было данных по 11-15 возрастным группам в стране CO. В этой ситуации численность населения будет равна 0. Более того, в некоторый год вообще нет конкретных гендерных данных. Например, за 2004 год нет данных о мужчинах для всех возрастов и стран, но я все еще хочу распечатать их в выходном файле с населением 0.
Ниже приведен код Python, который я написал, но онне работает, и я не знаю, как справиться с отсутствующими данными и распечатать их как 0 в поле населения.
import csv
import os
import sys
from operator import itemgetter, attrgetter
import math
from collections import Counter
# Create dictionary to hold the data
valDic = {}
# Read data into dictionary
with open(sys.argv[1], "r",) as inputfile:
readcsv = csv.reader(inputfile, delimiter = ',')
next(readcsv)
for line in readcsv:
key = line[0] + line[1] + line[2] + line[3]
year = line[0]
gender = line[1]
age = line[2]
country = line[3]
if key in valDic:
key = key + 1
else:
valDic[key] = [year, gender, age, country, 0] # 0s are placeholder for running sum and itemCount
inputfile.close()
newcsvfile = []
for key in valDic:
newcsvfile.append([valDic[key][0], valDic[key][1], valDic[key][2], valDic[key][3], len(valDic[key])])
newcsvfile = sorted(newcsvfile)
newcsvfile = [["year", "gender", "age", "country", "population"]]
with open(sys.argv[2], "w") as outputfile:
writer = csv.writer(outputfile)
writer.writerows(newcsvfile)