如何用for循环批量加载pickle文件?AirBnB数据集加载异常
解决循环加载Pickle文件后变量未定义的问题
你遇到的核心问题是:循环代码并没有创建你期望的rio_reviews这类独立变量,导致调用时触发NameError。
问题原因
循环中你每次将读取的数据集赋值给city变量,这个变量会在每轮循环被覆盖,且从未把数据绑定到data_name对应的目标变量名(比如rio_reviews)上。循环结束后,仅保留最后一次循环的city变量,其余你想要的变量根本没被创建。
解决方案
推荐方案:用字典统一存储数据集
用字典管理所有加载的数据,既避免变量混乱,也方便后续批量操作:
import pandas as pd path_data = '../Data/' # 定义所有数据名称 city_data = ['jc_listings','jc_calendar','jc_locale','jc_reviews', 'nyc_listings','nyc_calendar','nyc_locale','nyc_reviews', 'rio_listings','rio_calendar','rio_locale','rio_reviews'] # 初始化空字典存储数据 data_dict = {} # 循环加载数据到字典 for data_name in city_data: data_dict[data_name] = pd.read_pickle(path_data + data_name + '.pkl') print(f"已加载:{data_name},数据类型:{type(data_dict[data_name])}") # 调用指定数据示例 data_dict['rio_reviews'].info()
备选方案:动态创建全局变量(不推荐)
如果一定要生成独立的全局变量,可以用globals()函数,但这种方式容易造成命名空间混乱,仅适合简单场景:
import pandas as pd path_data = '../Data/' city_data = ['jc_listings','jc_calendar','jc_locale','jc_reviews', 'nyc_listings','nyc_calendar','nyc_locale','nyc_reviews', 'rio_listings','rio_calendar','rio_locale','rio_reviews'] for data_name in city_data: globals()[data_name] = pd.read_pickle(path_data + data_name + '.pkl') print(f"已加载:{data_name},数据类型:{type(globals()[data_name])}") # 现在可直接调用目标变量 rio_reviews.info()
内容的提问来源于stack exchange,提问作者Marcio Bernardo
相关产品推荐
相关产品推荐

