python - 读取文本并将它们存储到数据帧时间复杂度中
问题描述
我在尝试着
- 逐行读取数据文件
- 将它们存储到熊猫数据框中
- 输出到 csv
使用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 输出。
解决方案
推荐阅读
- sql - Eloquent SUM 和 GET 最新的关系数据
- amazon-web-services - 分配虚拟计算实例时虚拟化的工作原理
- assembly - 在 ARM 汇编中创建简单的加法和减法程序
- go - 正确发送 https Cookie
- javascript - fireEvent.Blur() 在我的自定义输入组件中不起作用
- ant - 有没有办法在 ant build 中逃避“@”
- python-3.x - 求解器如何根据距离矩阵确定源点和终点
- javascript - 如何从用户那里获取上传的图像文件并将其绘制在画布上?
- swiftui - 从列表中删除项目时索引不更新
- flutter - 我正在尝试缓存我的 http 调用请求,但是我的自定义缓存管理器我的基类不采用或支持默认设置值