Python:从csv中为列选择随机值

时间:2014-04-03 04:22:05

标签: 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等。 。这些值是如何确保均匀分布的高度倾斜?例如如果该列大多数为0s&amp;我希望在输出中看到任何样本大小的两个值。 。把它写进一个文件。 (此时不紧急)

我正在使用python 2.6.6

3 个答案:

答案 0 :(得分:0)

以下是无关示例,向您展示如何使用shufflepop方法:

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)

据我所知,你想这样做:

  1. 读取包含未知行数的CSV文件;
  2. 收集给定列中的所有项目,例如第2列;
  3. 从该列中随机选择一行。
  4. 如果这是正确的,那就很容易了。

    假设我们有一个像这样的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();

它以列的形式给我输出。

我将尝试将其编写为函数,然后添加其他功能。我可能会为此开始一个单独的线程。