Python 获取CSV的样本?

Python 获取CSV的样本?,python,json,python-3.x,csv,random,Python,Json,Python 3.x,Csv,Random,我有一个将CSV转换为有效JSON文件的程序 我想将其更改为获取我的CSV文件的随机子集(作为其50k行),并由此生成JSON。这是我到目前为止的代码- import csv import json csvfile = open('C:\\Users\\ADMIN\\Desktop\\CSV_1.csv', 'r') jsonfile = open('C:\\Users\\ADMIN\\Desktop\\Testing\\file.json', 'w') with open('C:\\Use

我有一个将CSV转换为有效JSON文件的程序

我想将其更改为获取我的CSV文件的随机子集(作为其50k行),并由此生成JSON。这是我到目前为止的代码-

import csv
import json

csvfile = open('C:\\Users\\ADMIN\\Desktop\\CSV_1.csv', 'r')
jsonfile = open('C:\\Users\\ADMIN\\Desktop\\Testing\\file.json', 'w')

with open('C:\\Users\\ADMIN\\Desktop\\CSV_1.csv') as f:
    reader = csv.DictReader(f)
    rows = list(reader)

with open('C:\\Users\\ADMIN\\Desktop\\Testing\\file.json', 'w') as f:
    json.dump(rows, f)
最有效的方法是什么


谢谢。

您可以对行列表应用
random.sample(lst,n)
,从
行列表中随机获取
n
行数,如下所示:

import random
rows_subset = random.sample(rows, 50)

# Then later in the code, dump the json and write it to the other file.
with open('gen.json', 'w') as f:
    f.write(json.dumps(rows_subset))

这将为您提供一个
50行的列表,您可以使用该列表或将其写入另一个文件。

如果您想要一个具有确定行数的示例,如Satish Garg所建议的,该示例的内置工具是
random.sample
。 问题是文件对象确实是可编辑的,但不是序列:没有
len
方法,没有直接索引

如果您有足够的内存,并且csv文件可以轻松放入,则更简单的方法是使用
reader.readlines()
加载列表中的所有内容,然后使用
random.sample
获取子集。或者,您可以读取一次文件以获取其长度,然后选择要组成样本的行号:

line_numbers_to_keep = sorted(random.sample(range(file_length), size_of_sample))
sample = []
index = 0
for i, row in enumerate(csv_reader):
    if i >= line_numbers_to_keep[index]:
        sample.append(row)
        index += 1
然后,您可以使用以下内容构建示例:

line_numbers_to_keep = sorted(random.sample(range(file_length), size_of_sample))
sample = []
index = 0
for i, row in enumerate(csv_reader):
    if i >= line_numbers_to_keep[index]:
        sample.append(row)
        index += 1
如果您想要原始文件中确定部分的样本,例如1/n,一个简单的技巧是跳过[0;2*n-1]范围内的随机数

你不会得到确切的分数,但从统计上看,它应该不会太远,并且随机性可以接受