Home > other >  How to make columns as row using dict & map
How to make columns as row using dict & map

Time:08-05

My csv file:

Measure names,Measure values
State,CA
Audit,Y
WFH,Y
State,MN
Audit,N
WFH,N
State,SC
Audit,Y
WFH,Y
State,LA
Audit,N
WFH,N
State,CO
Audit,P
WFH,N
State,MO
Audit,Y
WFH,N
State,NY
Audit,N
WFH,Y

Expected output :

State,Audit,WFH
CA,Y,Y
MN,N,N
SC,Y,Y
LA,N,N
CO,P,N
MO,Y,N
NY,N,Y

I dont want to use any extra library. I want to use only default python package.

code copied from stack over flow:

with open(r"input.csv") as in_f:
        open(r"output.csv", "w", newline="") as out_f:
    reader = DictReader(in_f)
    writer = None
    for items in reader:
        row = {
            **dict(map(itemgetter("Measure names", "Measure values"), items))
        }
        if not writer:
            writer = DictWriter(out_f, row)
            writer.writeheader()
        writer.writerow(row)

Is that anything posssible using Dict,map and itemgetter. Request your help

CodePudding user response:

Something like this?:

import csv
from itertools import islice


with open("in.csv", "r", newline="") as in_file:
    reader = csv.DictReader(in_file)

    fieldnames = ["State", "Audit", "WFH"]

    values = (row["Measure values"] for row in reader)

    with open("out.csv", "w", newline="") as out_file:
        writer = csv.DictWriter(out_file, fieldnames=fieldnames)

        writer.writeheader()

        while slc := tuple(islice(values, 3)):
            row = dict(zip(fieldnames, slc))
            writer.writerow(row)
  • Related