如何使用Pandas正确保存与读取不同尺寸的数值矩阵
解决不同尺寸矩阵CSV保存/读取后无法还原为数值矩阵的问题
CSV本质是纯文本表格格式,无法原生存储多维数组结构,直接用pd.to_csv保存时,Pandas会自动把numpy ndarray转成字符串存储,读取后自然无法直接还原为数值矩阵。以下是两种可行的解决方法:
方案1:使用Pickle直接序列化(最简便)
Pickle可以直接序列化Python对象(包括numpy ndarray),完美保留原数据结构,无需额外处理:
import numpy as np import pandas as pd # 生成数据 L = [] for Dim in range(3,10): L.append(np.random.randint(1,10, (Dim,Dim))) df = pd.DataFrame(L) # 保存为pickle文件 df.to_pickle('matrices.pkl') # 读取文件,直接恢复原ndarray结构 df_read = pd.read_pickle('matrices.pkl') # 验证:df_read.iloc[0][0] 为numpy.ndarray类型
方案2:强制用CSV存储(需手动序列化/反序列化)
如果必须使用CSV格式,可以把每个矩阵转成JSON字符串存储,读取时再解析回ndarray:
import numpy as np import pandas as pd import json # 生成数据 L = [] for Dim in range(3,10): L.append(np.random.randint(1,10, (Dim,Dim))) df = pd.DataFrame(L) # 将矩阵转为可解析的JSON字符串 df_json = df.applymap(lambda mat: json.dumps(mat.tolist())) # 保存为CSV df_json.to_csv('matrices.csv', index=False) # 读取CSV并解析回ndarray df_read = pd.read_csv('matrices.csv') df_read = df_read.applymap(lambda s: np.array(json.loads(s))) # 验证:df_read.iloc[0][0] 为numpy.ndarray类型
补充说明
直接用pd.to_csv无法解决这个问题,不是参数设置的问题——CSV格式本身只能存储扁平的文本/数值,不支持多维数组的结构存储,必须通过序列化转换为文本格式才能保存,读取时再反向解析。
内容的提问来源于stack exchange,提问作者Artashes
相关产品推荐
相关产品推荐

