如何保存包含非均匀部分的多维列表至文件?
问题:异构数据列表保存失败
数据结构
我用Python构建了一个包含50个变量的列表,结构如下:
[0][0] = 变量0的年度数值(20个数字组成的数组) [0][1] = 变量0的年度误差值(20个数字组成的数组) [0][2] = 变量0的名称(字符串) [11][1] = 变量11的年度误差值 ...
列表构建方式
这个列表是从CSV格式的DataFrame转换而来,原数据里变量值和误差值是相邻列排列的,构建代码大概是这样:
a = [] b = [] b.append(Data[Data.columns[1]]) # 取单个变量的数值列 b.append(Data[Data.columns[2]]) # 取对应变量的误差列(原数据紧跟在数值列后面) b.append("Data of y by person x") a.append(b) b = [] # 清空临时列表,处理下一个变量 b.append(Data[Data.columns[3]]) # ... 重复上述步骤处理所有变量 a.append(b) b = []
这个列表用起来很方便,能通过变量编号快速调取数据,不管是绘图还是分析都顺手。
保存失败的尝试与错误
我试了三种保存方法,全失败了:
np.savetxt("myfile.csv", a)np.savetxt("myfile.txt", a)a.tofile('myfile.csv', sep = ',')
每次都会弹出这个错误:
ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 2 dimensions. The detected shape was (67, 3) + inhomogeneous part
需求
我想把这个列表直接保存成文件,之后打开就能用,不用重新跑一遍构建代码。
解决方案
你的列表属于异构数据结构(既有数组又有字符串,而且子元素的长度不一致),numpy的保存工具只支持同构的数值数组,所以会报错。直接用Python的序列化工具就能解决:
方法1:用pickle(Python自带,无需额外安装)
import pickle # 保存列表 with open('my_data.pkl', 'wb') as f: pickle.dump(a, f) # 加载列表 with open('my_data.pkl', 'rb') as f: loaded_a = pickle.load(f)
方法2:用joblib(适合大数据,速度更快)
先安装joblib:pip install joblib,然后执行:
import joblib # 保存列表 joblib.dump(a, 'my_data.joblib') # 加载列表 loaded_a = joblib.load('my_data.joblib')
这两种方法都能完整保留列表的所有结构,加载后的列表和原列表完全一样,直接就能用。
内容的提问来源于stack exchange,提问作者jugimanni
相关产品推荐
相关产品推荐

