在Jupyter中如何通过变量名字符串访问DataFrame对象进行pickle?
批量序列化Jupyter中的pandas DataFrame
直接用%who DataFrame拿到的是变量名字符串,没法直接调用方法,你可以通过全局命名空间字典globals()获取实际的DataFrame对象,并且逐个序列化,避免内存堆积:
核心实现代码
import pandas as pd # 遍历全局变量,筛选并序列化所有DataFrame for var_name, obj in globals().items(): # 过滤掉系统临时变量、pandas自身对象,只保留自定义DataFrame if isinstance(obj, pd.DataFrame) and not var_name.startswith('_') and var_name != 'pd': # 以变量名作为文件名,逐个写入磁盘 obj.to_pickle(f"{var_name}.pkl")
额外优化
如果有不需要序列化的DataFrame,可以添加黑名单过滤:
import pandas as pd exclude_list = ["temp_df", "intermediate_df"] # 不需要序列化的变量名 for var_name, obj in globals().items(): if (isinstance(obj, pd.DataFrame) and not var_name.startswith('_') and var_name != 'pd' and var_name not in exclude_list): obj.to_pickle(f"{var_name}.pkl")
说明
globals()返回当前Jupyter会话的全局变量字典,键是变量名字符串,值是对应对象,这样就能直接拿到实际的DataFrame- 循环中直接调用
to_pickle,每个对象处理完成后立即写入磁盘,不会在内存中保留所有DataFrame的集合,解决大对象内存问题 - 序列化后的文件可以用
pd.read_pickle("变量名.pkl")重新加载
内容的提问来源于stack exchange,提问作者phollox
相关产品推荐
相关产品推荐

