使用python,如何选择csv文件的随机行?

Ell*_*Lee 0 python csv random row

我需要从csv文件中选择一个随机单词,我只是不知道如何启动它.所有单词都在一列中,但我想得到一个随机行,以便我可以输出一个随机单词.有什么想法吗?

Joh*_*itt 7

你可以使用熊猫:

import pandas as pd
csvfile = pd.read_csv('/your/file/path/here')
print csvfile.sample()
Run Code Online (Sandbox Code Playgroud)


Pet*_*ood 5

使用randomcsv模块.

如果你的csv文件足够小以适应内存,你可以阅读整个内容然后选择一行:

import csv
import random

with open(filename) as f:
    reader = csv.reader(f)
    chosen_row = random.choice(list(reader))
Run Code Online (Sandbox Code Playgroud)

您必须立即读入整个文件,因为choice需要知道有多少行.

如果您对通过数据进行多次传递感到高兴,可以对行进行计数,然后选择一个随机行并再次读入该文件到该行:

with open(filename) as f:
    lines = sum(1 for line in f)
    line_number = random.randrange(lines)

with open(filename) as f:
    reader = csv.reader(f)
    chosen_row = next(row for row_number, row in enumerate(reader)
                      if row_number == line_number)
Run Code Online (Sandbox Code Playgroud)

如果您想逐步地,随机地选择一行,而不知道将有多少行,您可以使用油藏采样.这可能会更慢,因为它会在行用完之前做出多个随机选择,但它一次只需要内存中的一行:

with open(filename) as f:
    reader = csv.reader(f)
    for index, row in enumerate(reader):
        if index == 0:
            chosen_row = row
        else:
            r = random.randint(0, index)
            if r == 0:
                chosen_row = row
Run Code Online (Sandbox Code Playgroud)