如何按列对CSV中的数据进行排序?

9gm1akwq  于 2023-01-15  发布在  其他
关注(0)|答案(2)|浏览(264)

我需要按用户ID升序组织CSV文件。该CSV文件有一个标题,我想保留在文档的顶部。标题下面有13500行数据

User_ID;firstname;lastname;location

我现在的代码省略了标题,如果我删除heading=next(csv_reader)行,它会把标题放在文档的底部。
当前输出也没有将它们按正确顺序排列,而是从ID的第一个值开始,而不是整数(ID=13000在ID=2000之前,一直到9999)

import csv
import operator
file = open("file.csv", 'r')

csv_reader = csv.reader(file, delimiter=';')

heading=next(csv_reader)

sort = sorted(csv_reader, key=operator.itemgetter(0))
for eachline in sort:
    print(eachline)
n7taea2i

n7taea2i1#

当前的排序是在lexical order中进行的,因为CSV文件的元素是 * string *。如果要将它们作为整数排序,请在sorted调用中使用key函数将它们转换为整数。

sorted_data = sorted(csv_reader, key=lambda row: int(row[0]))

我使用lambda而不是operator.itemgetter(0),因为我们无论如何都需要转换为int,这是最方便的方法。
要打印带有数据的页眉,请在打印数据之前打印页眉:

print(heading)
for line in sorted_data
    print(line)
46qrfjad

46qrfjad2#

您也可以使用pandas实现此功能:

import pandas as pd

df = pd.read_csv(open('file.csv'), delimiter=';')
sorted_df = df.sort_values(by=["User_ID"], ascending=True)
sorted_df.to_csv('file_sorted.csv', sep=';', index=False)

print(sorted_df.to_string(index=False))

相关问题