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



我需要按用户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)

当前排序以词法顺序进行,因为CSV文件的元素是字符串。如果您想将它们排序为整数,请使用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)

您也可以使用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))

相关内容

  • 没有找到相关文章

最新更新