文章目录
- 简介
- 1. pandas loc 尾部插入方法
- loc 尾部插入的速度
- 2. open 方法
- open方法 处理csv的速度
- open方法 处理csv代码
简介
笔者在处理稍大型(几十万条)的csv文件时,发现在csv文件中,使用panda的loc方法进行拼接,速度太过于缓慢。
笔者提出使用open方法,处理完成后的数据每行以,
进行分隔存储到文件中,程序运行速度比上述方法快200多倍。
from tqdm import tqdm
import pandas as pd
1. pandas loc 尾部插入方法
for _, row in tqdm(df.iterrows()):# 处理生成data列表new_df.loc[new_df.shape[0]] = value
new_df.to_csv('new.csv', index=False)
通常处理表格数据流程:
- 一行一行的遍历原始表格数据;
- 在新的
new_df
的尾部一行一行插入处理完成的数据; - 把
new_df
保存到本地
上述流程在处理小文件时,没有问题;
但当处理几十万行的文件时,随着程序运行,代码运行速度会越来越慢。
有人会认为这个是因为大文件把内存占满了,从而拖慢了程序的处理速度。
我想说的是:但当内存是足够时,每秒也才只能处理2000多条数据;依然没有下述open
方法快。
在我的数据上,上述代码在进行pandas.DataFrame拼接时,随着程度执行,越来越慢,最后每秒只能处理200条数据;太过于慢了!
loc 尾部插入的速度
使用pandas 尾部插入的实验
如上图表示,在程序刚开始执行时,处理了7647条数据,用时2秒,平均每秒处理2108条;
然而,随着程序的运行,当程序运行2分钟后,如下图所示,程序处理了6万条数据,程序的处理速度下降到每秒221条;而且还在继续下降;
2. open 方法
open方法 处理csv的速度
当换成使用文件读取的open
函数后,程序的处理速度一直可以保持在每秒处理 5万条数据
如上图所示,处理完全部的66万条数据,每秒处理5万多条,用时12秒全部处理完毕。
这个方法用来处理大文件非常好!
open方法 处理csv代码
csv 的数据是以,
分隔,故在文件中逐行写入以,
分隔的数据即可,甚至无需使用pandas包。
代码如下
with open('data.csv', 'w+', encoding='utf-8') as f:f.write(",".join(df.columns) + '\n')for _, row in tqdm(df.iterrows()):# 处理生成data列表...f.write(','.join(data) + '\n')