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
使用Python

问题是执行这些代码需要的时间太长。对于包含900000行的文件,大约需要1小时才能达到2%的分数

这是我正在阅读的示例文件

将有n个CAJ行和61列

标准的每个值保持不变,直到出现新值。(一个文件只有一个标题,多个FIN,等等)

首先,我使用

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