csv.DictReader needs to use empty string as default for missing values