Python 读取文本并将其存储到数据帧的时间复杂度
我正在努力Python 读取文本并将其存储到数据帧的时间复杂度,python,pandas,csv,dataframe,Python,Pandas,Csv,Dataframe,我正在努力 逐行读取数据文件 将它们存储到数据帧中 输出到csv 使用Python 问题是执行这些代码需要的时间太长。对于包含900000行的文件,大约需要1小时才能达到2%的分数 这是我正在阅读的示例文件 将有n个CAJ行和61列 标准的每个值保持不变,直到出现新值。(一个文件只有一个标题,多个FIN,等等) 首先,我使用 with open(filename) as fn: content = fn.readlines() 从文件中读取每一行 然后,我通过计算每个CAJ行,使
- 逐行读取数据文件
- 将它们存储到数据帧中
- 输出到csv
with open(filename) as fn:
content = fn.readlines()
从文件中读取每一行
然后,我通过计算每个CAJ行,使用pandas创建空(na)数据帧
row_count = 0
for line in content:
if(line[0:3] =='CAJ'):
row_count+=1
print('There is ' + str(row_count) + ' rows.')
df = pd.DataFrame(index=range(row_count), columns=columns)
(列是每个条件的列名称)
接下来,我为每一行创建临时值列表
row_list = ['']*len(columns)
row_list[0:2] = hdr[1:3]
最后,我检查每行的每个条件,并将其存储到临时数据库中。如果以CAJ结束,则修改数据帧的当前行并继续
row_counter = 0
for line in content:
if(line[0:3] =='FIN'):
fin_cur = line.split(',')[1:-1]
row_list[2:13] = fin_cur
elif(line[0:3] =='PRV'):
prv_cur = line.split(',')[1:-1]
row_list[13] = prv_cur[0]
elif(line[0:3] == 'PLB'):
plm_cur = line.split(',')[1:-1]
row_list[14:33] = plm_cur
elif(line[0:3] == 'CLM'):
clm_cur = line.split(',')[1:-1]
row_list[33:42] = clm_cur
elif(line[0:3] == 'CAJ'):
caj_cur = line.split(',')[1:-1]
row_list[42:61] = caj_cur
df.loc[row_counter]=row_list
row_counter+=1
我原以为是O(n),但时间比我想象的要长
我很确定有更好的方法将这些文件管理成csv文件
处理这些文件的最佳方式是什么
编辑
这是csv输出的示例
IIUC,为什么不读取文件并将其发送到数据帧,然后有条件地过滤数据帧?您可以使用一小部分数据运行测试。目前您使用的索引太多了。您的文件已经用逗号分隔,请使用该分隔符(
pd.read\u csv()
)。正确,只需在读取csv时指定nrows即可进行测试。我们也不知道你的数据是什么样子的。你有多少列?这是什么样的数据?谢谢你的评论。问题是,原始文件中的每一行并不代表dataframe中的每一行。每一行并不代表新行,而是在下一个条件(例如FIN、CLM等)之前保持不变的值。另外,pd.read\u csv()
给我的文件带来了错误。你的评论对于更好地理解你的问题并没有什么帮助。我相信,在使用pd.read\u csv()
创建数据帧后,您可以按照自己的方式修改数据帧。您得到的错误是什么?每行有不同的列数(逗号分隔的数据数)。这就是为什么我认为它对pd.read\u csv()没有意义。错误是错误标记化数据。C错误:第5行预期有13个字段,saw 21
。