Python 获取CSV的样本?
我有一个将CSV转换为有效JSON文件的程序 我想将其更改为获取我的CSV文件的随机子集(作为其50k行),并由此生成JSON。这是我到目前为止的代码-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
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]范围内的随机数
你不会得到确切的分数,但从统计上看,它应该不会太远,并且随机性可以接受