读取文本并将其存储到数据帧中的时间复杂度

时间:2018-08-20 18:20:59

标签: python pandas csv dataframe

我正在尝试

  • 逐行读取数据文件
  • 将它们存储到熊猫数据框
  • 输出到csv

使用 Python

问题是执行这些代码花费的时间太长。具有90万行的文件花了大约1个小时才达到2%。

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

Example Output

将有n个CAJ行和61列

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

首先我正在使用

with open(filename) as fn:
    content = fn.readlines()

从文件中读取每一行。

然后我通过对每条CAJ行进行计数来使用熊猫创建空的(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输出。

output

0 个答案:

没有答案