Python:从CSV中随机选择列的值
我遇到了一个问题,想从一个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等。
- 这些值的分布很不均匀,怎么才能确保输出的值是均匀的?比如,如果这一列大部分是0,只有少量的1,我希望在任何样本大小中都能看到这两个值。
- 把这些结果写入一个文件中。(目前这个不是很急)
我使用的是Python 2.6.6
3 个回答
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();
它的输出结果是以列的形式显示的。
接下来我打算把它写成一个函数,并添加其他功能。我可能会为这个开始一个新的讨论。
0
根据我的理解,你想做的是:
- 读取一个行数不确定的CSV文件;
- 收集某一列的所有项目,比如第二列;
- 从这一列中随机选择一行。
如果我理解得没错,这个操作其实很简单。
假设我们有一个这样的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)
的方式打印出来,前提是数据中的所有元素都是字符串。
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
方法会删除列表中的最后一个元素,并把它返回。不过,因为你在这之前已经打乱了列表,所以每次得到的顺序都是随机的。