I'm trying to order a .csv file with just over 300 entries and output it all back out ordered by the numerical values in one specific column under a dialect.
Here's the code I've written so far but it just seems to output the data as it went in
import csv
import itertools
from itertools import groupby as gb
reader = csv.DictReader(open('Full_List.csv', 'r'))
groups = gb(reader, lambda d: d['red label'])
result = [max(g, key=lambda d: d['red label']) for k, g in groups]
writer = csv.DictWriter(open('output.csv', 'w'), reader.fieldnames)
writer.writeheader()
writer.writerows(result)
There's only 50 rows in the whole file that contain a value under the dialect "red label" and all the others are left blank.
It's in the Z column on the .csv(but not that last one) so I'd assume the index of the column is 25(0 being the first).
Any help would be greatly appreciated.
解决方案
How about using pandas?
import pandas as pd
df = pd.read_csv('Full_List.csv')
df = df.sort('red label')
df.to_csv('Full_List_sorted.csv', index=False)
You may need to adjust the options to read_csv and to_csv to match the format of your CSV file.