我需要将多个巨大的csv文件(每个100k +行,100+行)转换为JSON,以进行进一步处理。 我想到了将csv线程化和拆分为块以便更快地处理,但是无法通过内置的csv库使python只读取某些行。因此,我想到了pandas.read_csv。 但是,现在我想不出一种将熊猫数据帧很好地转换为json而又不会由于实现循环而导致所有性能下降的高效方式。
我已经有一个单线程按顺序解析文件。工作正常,速度非常慢,并且每天都会更新数据,因此每天重做一次都没有意思...
header = next(f)
for row in f:
data[row[0]] = dict()
e = 0
for element in row[1:]:
e += 1
if element != "":
try:
data[row[0]][header[e + 1]] = int(element)
except ValueError:
data[row[0]][header[e+1]] = element
结果应该保持不变,只是要快得多...
data = pd.read_csv(file_name, skiprows=self.chunk, nrows=self.steps)
data = data.to_dict(orient="records")
将是我的开始,但直到现在为止,除了缓慢的循环之外,什么都没有。现在,数据是所有行的列表,每行包含一个字典,该字典包含上一行的键(不是标题),并且期望值为值:
[{row_above_chunk[0] = row[0], row_above_chunk[1] = row[1], row_above_chunk[2] = row[2], ...}, {...}]
答案 0 :(得分:0)
似乎有一个复合问题:
您可以使用以下内容:
with open('DataDump.json', 'w') as file:
dfs = pd.read_csv('FilePATH.csv', chunksize=50000)
for df in dfs:
df.to_json(file)
这使用了chunksize
和df.to_json()
,还有documentation。
您可以将chunksize
更改为适合您存储容量的内容。