从 CSV 中随机选择行并重复 X 次

Posted

技术标签:

【中文标题】从 CSV 中随机选择行并重复 X 次【英文标题】:Random select rows from CSV and repeat by X number of times 【发布时间】:2020-02-21 14:15:21 【问题描述】:

我是 Python 新手,并创建了一个脚本,该脚本可以从具有两列的 csv 中挑选出随机行。但它只从每一列中随机抽取一次。这是我的代码:

import csv
import random

with open('Sheettwo.csv', 'r') as csv_file:
    csv_reader = csv.reader(csv_file)

    chosen_row = random.choice(list(csv_reader))

    paraone = (chosen_row[1])
    paratwo = (chosen_row[2])

    print(f'paraone\nparatwo\n')

我需要重复此 X 次,因此(例如)随机选择 4 个值(每列两个)。我该怎么做?

【问题讨论】:

【参考方案1】:

更好的方法是先将数据存储在列表中,然后从中选择值。

import csv
import random

with open('Sheettwo.csv', 'r') as csv_file:

    lines = [tuple(line) for line in csv.reader(csv_file)]


n = 4 #  number of row you want to pick elements from

chosen_rows = random.choices(lines, k=n) 
 # pick n rows in the list

chosen_values = [random.choice(row) for row in chosen_rows]
  # pick a value from each row

print('\n'.join(chosen_values))

希望对你有用……

【讨论】:

谢谢,效果很好。但它会将值输出到单行中,例如:选择 6 选择 25 选择 13 选择 32 选择 3 选择 22 选择 4 选择 23 有没有办法单独输出并成对分组? 谢谢兰比。完美的。它输出 'Chosen row X:' 但是我如何让它从列表中为每个组输出一个随机值,例如 names = ['Name 1', 'Name 2','Name 3','Name 4'] ?感谢您的帮助。 我想确定你想要什么:如果你的数据是 [(1,2),(3, 4),(5,6),(7,8),(9 ,10),(11,12)],输出 1 6 3 10 适合你吗?您想为文件中的 4 个随机行选择一个随机值吗?如果我只是在文件中随机选择 4 个元素,例如 1 2 9 10 是否仍然很好:我可以在同一行中选择 2 个值吗? 是的,我想为 4 行选择一个随机值。我需要指定随机值。不能两次选择相同的值。我将此添加到您的代码末尾,它有点工作但没有正确转义 - print(random.choice(names),'\n','\n'.join(c),'\n')跨度> 【参考方案2】: 你需要保留你的 list(csv_reader),因为 csv.reader 是一个惰性迭代器,所以在它完成整个事情一次之后......它就完成了 如果重复没问题,只需循环调用random.choice 否则使用random.choices(lines, k=n),其中 k 是您要选择的行数

【讨论】:

以上是关于从 CSV 中随机选择行并重复 X 次的主要内容,如果未能解决你的问题,请参考以下文章

从文件中选择随机行

从 Jmeter 中的 CSV 文件中随机选择

我将如何阻止随机颜色随机选择两次相同的颜色[重复]

如何从python中的CSV文件中的列中选择一个随机值?

请问用java从1-33个整数中随机抽取6个数字 且不重复 该怎么写?

我怎样才能重复这个查询 100 次?