从非常大的数据集中抽取随机样本

问题描述 投票:0回答:1

我有一个 160MM 行的 csv 数据集,无法直接通过 Pandas 导入(RAM 内存不够)。 我怎样才能从原始数据集中抽取 5% 的随机样本(在本例中,是一个大约 8MM 行的样本)??? 艾米的洞察力值得赞赏... 干杯, 马塞洛

我尝试过使用块,但没有成功。

pandas random sample
1个回答
0
投票
  1. 确定 CSV 中的总行数 N。也许你已经知道了。您只需执行一次,您可以将其存储在某个地方以供重复使用。
  2. 生成 [0, N) 中的随机数。请参阅 https://stackoverflow.com/a/77513347/4323
  3. 对随机数进行排序。
  4. 一次性读取 CSV。对于每个随机数,跳行直到到达该行。要更快地跳行,请参阅在读取 Python 文件中的行时跳过前几行

如果这还不够快,还有另一种方法:

sample = subprocess.check_output(['shuf', '-n', '8000000', 'file.csv'])

它使用 https://man7.org/linux/man-pages/man1/shuf.1.html 这可能比你单独使用 Python 得到的结果更快。

© www.soinside.com 2019 - 2024. All rights reserved.