繁体   English   中英

如何在 python 中读取和排序 csv 文件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM