You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免每次运行Python脚本时重新加载数据(Spyder环境)

解决Spyder中重复加载大量CSV的高效方案

嘿,这个场景我太熟悉了——每次调参数都要重新跑一遍加载1000个CSV的代码,哪怕只有几秒,重复多了也真的闹心!别再用注释代码这种临时办法了,给你几个在Spyder里能用的高效解决方案:

1. 利用IPython内核的持久化特性

Spyder默认用的是IPython内核,它会保留你已经运行过的变量。你可以:

  • 把加载CSV的代码单独选中,按F9运行一次,这时候数据就已经存在内存里了;
  • 之后修改参数或变量名时,只需要运行后续的处理代码(同样选中后按F9),完全不用重新加载文件;
  • 如果哪天需要更新数据,再重新跑一遍加载代码就行,平时不用碰它。

2. 给加载函数加缓存装饰器

用缓存把加载结果存起来,第一次加载后,后续调用直接用缓存,不用再读磁盘。推荐两种方式:

内存缓存(适合小到中等数据)

用Python标准库的functools.lru_cache,把加载逻辑封装成函数:

from functools import lru_cache
import pandas as pd
import os

# 注意:lru_cache要求参数是可哈希类型,所以把文件路径列表转成元组
@lru_cache(maxsize=None)
def load_all_csvs(file_paths):
    df_list = []
    for path in file_paths:
        full_path = os.path.join("/your/csv/folder/", path)
        df_list.append(pd.read_csv(full_path))
    return pd.concat(df_list, ignore_index=True)

# 第一次调用会加载,之后直接取缓存
csv_paths = tuple(os.listdir("/your/csv/folder/"))
dataset = load_all_csvs(csv_paths)

磁盘缓存(适合大数据)

如果数据太大,内存缓存放不下,用joblib把缓存存到磁盘,重启Spyder也能复用:

from joblib import Memory
import pandas as pd
import os

# 创建缓存目录
memory = Memory(location="./csv_cache", verbose=0)

@memory.cache
def load_all_csvs(file_paths):
    df_list = []
    for path in file_paths:
        full_path = os.path.join("/your/csv/folder/", path)
        df_list.append(pd.read_csv(full_path))
    return pd.concat(df_list, ignore_index=True)

csv_paths = os.listdir("/your/csv/folder/")
dataset = load_all_csvs(csv_paths)

3. 合并CSV为高效格式(适合数据不常更新的情况)

如果这些CSV文件不会频繁修改,直接一次性合并成Parquet或Feather格式——这两种格式加载速度比CSV快N倍,还能压缩空间:

import pandas as pd
import os

# 仅第一次运行:合并所有CSV并保存
csv_folder = "/your/csv/folder/"
all_dfs = []
for filename in os.listdir(csv_folder):
    if filename.endswith(".csv"):
        all_dfs.append(pd.read_csv(os.path.join(csv_folder, filename)))
combined_df = pd.concat(all_dfs, ignore_index=True)
combined_df.to_parquet("./combined_dataset.parquet")  # 保存为Parquet

# 之后每次直接加载这个文件就行
dataset = pd.read_parquet("./combined_dataset.parquet")

4. 用Spyder的“运行选中代码”功能

把脚本分成两部分:数据加载块和参数处理/测试块。修改参数后,只选中处理部分的代码按F9运行,不用执行整个脚本。这样也能避免重复加载数据。

内容的提问来源于stack exchange,提问作者shep4rd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:16:06