首页 > 解决方案 > 读取文本并将它们存储到数据帧时间复杂度中

问题描述

我在尝试着

使用Python

问题是执行这些代码需要很长时间。对于具有 900,000 行的文件,大约需要 1 小时才能达到 2% 的分数。

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

示例输出

将有 n 个 CAJ 行和 61 列

标准的每个值都保持不变,直到出现新的值。(一个文件只有一个header,多个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 输出。

输出

标签: pythonpandascsvdataframe

解决方案


推荐阅读