Tuesday, August 22, 2017
Transposing csv data using Python
Transposing csv data using Python
Here is the case:
- You have this original csv data:
name,course,number
A,Genius,12
A,Super,13
B,Goddess,15
C,The Man,17
C,The Woman,10
C,Harvard,11
C,StanFord,18
- and you want to create another csv file that uses names values as columns and group the courses value as rows:
A,B,C
Genius,Goddess,The Man
Super,,The Woman
,,Harvard
,,StanFord
Here is what I did to achieve that:
1. Read the original csv file and convert it into a list of dicts
2. Transpose the list by grouping the name column:
- Get all the names value
group_cols = []
for o in original_list:
if o[group_col_name].strip() not in group_cols:
group_cols.append(o[group_col_name].strip())
- For each of the name, loop through the original list and append the according courses value to a tmp list (with the name as the first item), then add all of the tmp lists to a new list:
thelist = []
for c in group_cols:
line = []
line.append(c)
for o in original_list:
if o[group_col_name].strip() == c:
line.append(o[data_col_name].strip())
thelist.append(line)
=> thelist = [[A, Genius, Super], [B, Goddess], [C, The Man, The Woman, Harvard, Stanford]]
- Equalize all the child listss length (here):
thelist = equalize_lists_length(thelist)
=> thelist = [[A, Genius, Super, ,], [B, Goddess,,,], [C, The Man, The Woman, Harvard, Stanford]]
- Transpose the new list using itertools.izip:
thelist = list(izip(*thelist))
=> thelist = [[A, B, C], [Genius, Goddess, The Man],...]
3. Write the new list to the csv file
Here is the full code:
Usage:
>>> transposed_list_to_csv(original_csv_path, new_csv_path, name, course)
http://me.dangtrinh.com
download file now
Labels:
csv,
data,
python,
transposing,
using