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