如何实现动态加载多CSV文件并返回数组的Python函数?
问题描述
我正在开发一个加载函数,用来加载每个仅包含单个pandas DataFrame(最好直接转成numpy数组)的CSV文件,把每个文件关联到对应的数组变量。函数的输入是一个字典,键是期望的变量名,值是CSV文件的路径/名称。
输入示例:
d = {'XLF' : 'X4_2_LF.csv', 'XHF' : 'X4_2_HF.csv', 'yLF' : 'y4_4_LF.csv', 'yHF' : 'y4_4_HF.csv'}
我希望通过这个函数加载上述4个文件,返回对应的数组变量(比如XLF、XHF等),或者包含这些变量的单个字典。目前我能成功加载文件,但因为输入字典的元素数量不固定,不知道怎么正确返回结果。当前代码如下:
def load_data_dic(d): path = os.getcwd() + '\\results\\data\\' out = {} for key, val in d.items(): nm = path + val locals()[key] = pd.read_csv(nm, index_col = 0).to_numpy() return out #don't know how to fill it!
解决方案
方案1:返回包含所有变量的字典(推荐)
这是最灵活的处理方式,不管输入字典有多少元素都能适配。你不需要用locals(),直接把加载后的数组存入out字典即可:
import os import pandas as pd def load_data_dic(d): # 用os.path.join拼接路径,适配不同系统的路径分隔符 base_path = os.path.join(os.getcwd(), 'results', 'data') out = {} for key, filename in d.items(): file_path = os.path.join(base_path, filename) # 加载CSV并转成numpy数组 out[key] = pd.read_csv(file_path, index_col=0).to_numpy() return out
使用方式:
data_dict = load_data_dic(d) # 通过键直接访问对应的数组 XLF = data_dict['XLF'] XHF = data_dict['XHF']
方案2:返回独立变量(按需使用)
如果一定要拿到单独的变量,可以用字典解包的方式,但这种方式依赖你明确知道输入的键名,灵活性不如字典:
# 先获取字典结果 data_dict = load_data_dic(d) # 解包成独立变量 XLF, XHF, yLF, yHF = data_dict['XLF'], data_dict['XHF'], data_dict['yLF'], data_dict['yHF']
也可以用命名元组,既能通过属性访问变量,又能保持结构统一:
from collections import namedtuple def load_data_dic(d): base_path = os.path.join(os.getcwd(), 'results', 'data') data = {} for key, filename in d.items(): file_path = os.path.join(base_path, filename) data[key] = pd.read_csv(file_path, index_col=0).to_numpy() # 根据字典键创建命名元组类 DataTuple = namedtuple('DataTuple', data.keys()) return DataTuple(**data)
使用方式:
data = load_data_dic(d) XLF = data.XLF XHF = data.XHF
注意事项
- 优先用
os.path.join拼接路径,比直接字符串拼接更安全,能自动适配Windows、Linux等系统的路径分隔符。 - 不要用
locals()创建变量,这种方式不直观,而且函数内部的局部变量无法直接传递到外部,必须存入字典或其他容器才能返回。
内容的提问来源于stack exchange,提问作者mz_97
相关产品推荐
相关产品推荐

