gpt4 book ai didi

python - 将大型 (10gb) 时间序列 CSV 文件处理为每日文件

转载 作者:行者123 更新时间:2023-12-01 02:04:00 24 4
gpt4 key购买 nike

我是 Python 3 的新手,来自 R。

我有一个非常大的时间序列文件(10GB),跨越 6 个月。它是一个 csv 文件,其中每行包含 6 个字段:日期、时间、Data1、Data2、Data3、Data4。 “数据”字段是数字。我想迭代该文件并创建和写入仅包含一天数据的单个文件。仅通过日期字段突然变化这一事实才能知道各个日期。即,它们不包括周末、某些假期以及由于不可预见的事件而随机关闭,因此唯一日期的向量不是确定性的。此外,每天的行数也是可变且未知的。

我设想将每一行读入缓冲区并将日期与前一个日期进行比较。

如果下一个日期=上一个日期,我将该行附加到缓冲区。我重复此操作,直到下一个日期!=上一个日期,此时我将缓冲区写入新的 csv 文件,该文件仅包含当天的数据(00:00:00 到 23:59:59)。

我在用 pandas 数据帧附加新行时遇到了麻烦,并且在列表中使用 readline 对我来说太困惑了。寻找Python式的建议。

最佳答案

pandas 在这里不是一个好的选择,因为它读取整个 CSV。标准 csv 模块逐行迭代,将更好地为您工作。编写嵌套 for 循环来读取每一行并进行写入非常简单,但如果您利用迭代器来缩短代码,则会获得额外的分数。

itertools.groupby 很有趣,因为它为您实现了对新日期的检查。在获得迭代器后,它会返回迭代器,每当像日期这样的键发生变化时,迭代器就会停止。这些迭代器可由 csv 编写器使用。

import csv
import itertools

with open('test_in.csv') as in_fp:
reader = csv.reader(in_fp)
for date, row_iter in itertools.groupby(reader, key=lambda row: row[0]):
out_filename = date.replace('/','-') + '.csv' # todo: name your output file
with open(out_filename, 'w') as out_fp:
csv.writer(out_fp).writerows(row_iter)

关于python - 将大型 (10gb) 时间序列 CSV 文件处理为每日文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49247108/

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