gpt4 book ai didi

python - 如何在Python中聚合记录?

转载 作者:行者123 更新时间:2023-12-01 05:44:23 25 4
gpt4 key购买 nike

我有一个以下 csv 文件(每行都是动态字符数,但列是固定的......希望我说得通)

   **001**     Math        **02/20/2013**  A

**001** Literature **03/02/2013** B

**002** Biology **01/01/2013** A

**003** Biology **04/08/2013** A

**001** Biology **05/01/2013** B

**002** Math **03/10/2013** C

我正在尝试将结果按以下格式获取到另一个 csv 文件中,其中按学生 ID 分组并按日期升序排列。

   001,#Math;A;02/20/2013#Biology;B;05/01/2013#Literature;B;03/02/2013

002,#Biology;A;01/01/2013#Math;C;03/10/2013

003,#Biology;A;04/08/2013

不过有一个限制。 输入文件很大,大约有 2 亿行。我尝试使用 C# 并将其存储在数据库中并编写 SQL 查询。它非常慢并且不被接受。经过谷歌搜索后,我听说 python 对于这些操作非常强大。我是 Python 新手,开始玩代码。我真的很感谢 PYTHON 专家帮助我得到上面提到的结果。

最佳答案

content='''
**001** Math **02/20/2013** A

**001** Literature **03/02/2013** B

**002** Biology **01/01/2013** A

**003** Biology **04/08/2013** A

**001** Biology **05/01/2013** B

**002** Math **03/10/2013** C
'''

from collections import defaultdict

lines = content.split("\n")
items_iter = (line.split() for line in lines if line.strip())

aggregated = defaultdict(list)

for items in items_iter:
stud, class_, date, grade = (t.strip('*') for t in items)
aggregated[stud].append((class_, grade, date))

for stud, data in aggregated.iteritems():
full_grades = [';'.join(items) for items in data]
print '{},#{}'.format(stud, '#'.join(full_grades))

输出:

003,#Biology;A;04/08/2013
002,#Biology;A;01/01/2013#Math;C;03/10/2013
001,#Math;A;02/20/2013#Literature;B;03/02/2013#Biology;B;05/01/2013

当然,这是一个丑陋的黑客代码,只是为了向您展示如何在 python 中完成它。处理大量数据流时,请使用 generatorsiterators ,并且不要使用 file.readlines()just iterate 。迭代器不会一次读取所有数据,而是在迭代它们时逐 block 读取,而不是更早读取。

如果您担心 200m 记录是否适合内存,请执行以下操作:

  1. 按学生 ID 将记录分类到单独的“存储桶”中(如 bucket sort )

    cat all_records.txt | grep 001 > Stud_001.txt # 如果其他学生也这样做

  2. 对每个桶进行处理

  3. 合并

grep 只是示例。制作一个更高级的脚本(awk 或 python),它将按学生 ID 进行过滤,例如过滤所有 ID < 1000 的内容,稍后过滤 1000 < ID < 2000 的内容,依此类推。您可以安全地进行操作,因为每个学生的记录是不相交的。

关于python - 如何在Python中聚合记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16618401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com