【问题标题】:How to print random n rows from a csv file?如何从 csv 文件中打印随机 n 行?
【发布时间】:2022-01-06 05:52:14
【问题描述】:

所以我有一个大的 csv 文件,我的代码打印了所有行,但我想打印,例如,100000 行中只有 20 个随机行。我知道random.sample 你可以做到这一点,但我真的不知道怎么做。有什么建议吗?

这是我的代码:

import csv

with open(r'Z:/**/**/**/test_examples_doors/
**') as csvfile:   
 data = csv.DictReader(csvfile)
 for row in data:
     if row['open']=='1':
print(row['image'], row['open'])

【问题讨论】:

  • 您要打印哪 20 行?前 20 行、后 20 行、中间 20 行还是随机行 20 行?
  • @rickdenhaan 我刚刚编辑了我的问题。随机 20 行
  • 这能回答你的问题吗? Random row selection in Pandas dataframe

标签: python csv


【解决方案1】:

我不太明白你的问题,但要获得 20 行,你可以用计数器替换代码

x = 0
for row in data:
    x += 1
    print(row['image'], row['open'])
    if x == 20:
        break

编辑:好的,我明白了,从列表中随机抽取一个样本,然后删除该样本,然后再获取另一个样本。

for x in range(20):
    num = random.randint(0,len(data))
    print(data[num]['image'], data[num]['open'])
    del data[num]

【讨论】:

  • 如果这样做,使用enumerator会更整洁
【解决方案2】:

我假设您想随机抽样数据,而不是只取前 20 行?

在这种情况下,您可以将data 转换为列表,然后对其进行采样:

import csv
import random
with open(r'Z:/datasets/room-segmentation/labeling/test_examples_doors/labels.csv') as csvfile:
    data = csv.DictReader(csvfile)
sampled_data = random.sample(list(data), 20)

【讨论】:

  • 如果您事先知道行数,请注意先选择要保留的行会更有效。与解析和存储完整的 20k 行相比,你浪费的内存和处理器要少得多,只是在最后扔掉其中的大部分;)
【解决方案3】:

如果您不需要自己编写代码,GoCSVsample 命令可以做到这一点:

gocsv sample -n 20 labels.csv

【讨论】:

    猜你喜欢
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 2015-01-23
    相关资源
    最近更新 更多