我有一个问题是从csv中为给定的列名/索引打印随机值(我在Python世界中的第二天:))
到目前为止,我已设法编写以下内容 -
#!/usr/bin/python
import csv # This will help us reading csv formated files.
import random # This will random method
load_file= open('<filename>',"rb")
reader= csv.reader(load_file) #The reader method will put each line
# of the csv file into a list of columns
for row in reader:
from random import shuffle
shuffle(row[2])
print row[2]
load_file.close();
它正在从文件的第三列打印一个混洗(随机)值。
目标 - 。定义值的数量1000,2000,50000等。 。这些值是如何确保均匀分布的高度倾斜?例如如果该列大多数为0s&amp;我希望在输出中看到任何样本大小的两个值。 。把它写进一个文件。 (此时不紧急)
我正在使用python 2.6.6
答案 0 :(得分:0)
以下是无关示例,向您展示如何使用shuffle
和pop
方法:
from random import shuffle
a = [1,2,3,4,5]
shuffle(a)
print a
[5,1,4,2,3]
print a.pop()
3
print a
[5,1,4,2]
没有任何参数的pop
方法会删除列表中的最后一个元素,然后返回它。但是,由于您事先对列表进行了洗牌,因此每次都会得到一个随机序列。
答案 1 :(得分:0)
据我所知,你想这样做:
如果这是正确的,那就很容易了。
假设我们有一个像这样的CSV文件:
1,2,3,4
5,6,7,8
9,10,11,12
13,14,15,16
通常您会逐行处理CSV文件。由于您需要列中的所有数据,因此您需要先读取整个文件,然后才能使用一组数据,因为总行数未知。
这是一种方式:
import csv
col=2
with open(fn, 'r') as f:
reader=csv.reader(f)
data=[row[col] for row in reader]
print data
# ['3', '7', '11', '15']
然后,如果您想要该列表中的单个随机数,请使用random.choice(data)
如果要对该列中的所有项目进行随机播放,请使用random.shuffle(data)
,然后使用print '\n'.join(data)
之类的内容将其打印为列,前提是数据的所有元素都是字符串。
答案 2 :(得分:0)
感谢@dawg,@ sshashank124和其他人 -
这是代码 -
#!/usr/bin/python
import csv # This will help us reading csv formated files.
import random # random method
col=2
with open('<filename>','r') as f:
reader=csv.reader(f)
data=[row[col] for row in reader]
from random import shuffle
shuffle(data)
print '\n'.join(data[:100])
f.close();
它以列的形式给我输出。
我将尝试将其编写为函数,然后添加其他功能。我可能会为此开始一个单独的线程。