【发布时间】:2017-12-04 11:08:09
【问题描述】:
我有一个解析 JSON 文件的非常简单的代码。该文件包含作为 JSON 对象的每一行。出于某种原因,每行的处理时间会随着我运行代码而增加。
有人可以向我解释为什么会发生这种情况以及如何阻止这种情况吗?
这里是sn-p的代码:
from ast import literal_eval as le
import re
import string
from pandas import DataFrame
import pandas
import time
f = open('file.json')
df = DataFrame(columns=(column_names))
row_num = 0
while True:
t = time.time()
for line in f:
line = line.strip()
d = le(line)
df.loc[row_num] = [d[column_name1], d[column_name2]]
row_num+=1
if(row_num%5000 == 0):
print row_num, 'done', time.time() - t
break
df.to_csv('MetaAnalysis', encoding='utf-8')
部分输出如下:
5000 done 11.4549999237
10000 done 16.5380001068
15000 done 24.2339999676
20000 done 36.3680000305
25000 done 50.0610001087
30000 done 57.0130000114
35000 done 65.9800000191
40000 done 74.4649999142
可见,每一行的时间都在增加。
【问题讨论】:
-
看起来
df.loc是O(n)WRTdf中的项目数? -
一种方法可以是为每个 5000 个块创建
df并 pd.concat 该块,这可能不如 pd.Series 和 append 快,但可能比当前的更好。
标签: python