[英]How can I read and sort a csv file in python?
我是 python 的新手,有一个带有名称和分数的 csv 文件,如下所示:
Andrew,10
Steve,14
Bob,17
Andrew,11
我需要知道如何读取这个文件,并且该文件必须显示两个同名条目,例如 Andrew,10 和 Andrew,11 为 Andrew,10,11。 我还需要能够按名称、最高分或平均分进行排序。 如果可能,我还希望它只为每个名称使用最后 3 个条目。 这是我试图用来按名称阅读和排序的代码:
with open("Class1.csv", "r") as f:
Reader = csv.reader(f)
Data = list(Reader)
Data.sort()
print(Data)
Pandas 非常适合它
import pandas as pd
df = pd.read_csv("<pathToFileIN>",index_col=None,header=None)
df.columns = ["name","x"]
n = df.groupby("name").apply(lambda x: ",".join([str(_) for _ in x["x"].values[-3:]])).values
df.drop_duplicates(subset="name",inplace=True)
df["x"] = n
df.sort("name",inplace=True)
df.to_csv("<pathToFileOUT>",index=None,sep=";")
要合并分数,请使用collections.defaultdict
:
scores_by_name = collections.defaultdict(list)
for row in Reader:
name = row[0]
score = int(row[1])
scores_by_name[name].append(score)
要保留最后三个分数,请取 3 个项目切片:
scores_by_name = {name: scores[-3:] for name, score in scores_by_name.items()}
按字母顺序迭代:
for name, scores in sorted(scores_by_name.items()):
... # whatever
按最高分迭代:
for name, scores in sorted(scores_by_name.items(), key=(lambda item: max(item[1]))):
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.