从 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 次的主要内容,如果未能解决你的问题,请参考以下文章