如何在Python中加速批量导入CSV、清洗数据并合并?
多CSV文件清洗合并提速方案
先说说你当前代码的几个性能瓶颈:
- 每次循环都用
pd.concat拼接,会反复复制整个数据集,数据量越大越慢 - 先读取全量CSV再删除前两行+列,做了很多无用的IO和内存操作
- 多余的
to_numpy()转换完全没必要,反而增加类型转换开销
下面是针对性的优化方案:
1. 读取阶段直接过滤无效数据
不用读完CSV再删行删列,直接在pd.read_csv里完成过滤:
skiprows=[0,1]:直接跳过前两行无效行usecols=lambda col: col != 'Start Time':读取时直接排除不需要的列
这一步能大幅减少IO和内存占用,因为根本不会加载无用的数据。
2. 用列表收集DataFrame,最后一次性合并
循环里只把处理好的DataFrame存入列表,最后一次调用pd.concat合并所有元素——这种方式避免了循环中反复复制数据集,是Pandas批量合并的最优实践。
3. 去掉无意义的numpy转换
原代码里的df.to_numpy()完全是多余的,直接用DataFrame操作更高效,还能保留列信息和数据类型。
优化后的完整代码
import pandas as pd from tqdm import tqdm # 直接在读取时完成清洗,替代原clean_csv函数 def load_and_clean_csv(file): return pd.read_csv( file, skiprows=[0, 1], # 跳过前两行NaN usecols=lambda col: col != 'Start Time' # 排除指定列 ) # 主逻辑:列表收集+一次性合并 df_list = [] for file in tqdm(files): df_clean = load_and_clean_csv(file) df_list.append(df_clean) # 最后一次性合并所有DataFrame df_result = pd.concat(df_list, axis='index', ignore_index=True)
额外提速建议(可选)
- 如果CSV文件格式完全一致,可以用
pd.concat(pd.read_csv(f, **read_kwargs) for f in files)的生成器写法,进一步减少内存占用 - 若数据量极大,可考虑用
dask.dataframe做并行加载合并,利用多CPU核心
内容的提问来源于stack exchange,提问作者ldamico
相关产品推荐
相关产品推荐

