Python:从CSV中随机选择列的值

1 投票
3 回答
3827 浏览
提问于 2025-04-18 01:06

我遇到了一个问题,想从一个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

根据我的理解,你想做的是:

  1. 读取一个行数不确定的CSV文件;
  2. 收集某一列的所有项目,比如第二列;
  3. 从这一列中随机选择一行。

如果我理解得没错,这个操作其实很简单。

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

这里有一个不相关的例子,来给你展示一下如何使用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方法会删除列表中的最后一个元素,并把它返回。不过,因为你在这之前已经打乱了列表,所以每次得到的顺序都是随机的。

撰写回答