如何将多组矩阵转换为pandas DataFrame并解决维度匹配报错
多时间点二维矩阵存入Pandas DataFrame的实现方案
报错原因
你传入pd.DataFrame()的参数是4个二维数组组成的列表,Pandas会将每个二维数组识别为单个元素,传入数据的实际结构为4行1列(每行对应1个完整矩阵),和你指定的4个列名的结构要求不匹配,因此触发Shape不匹配报错。
实现方案
方案1:单列存储完整矩阵(适合只需要整矩阵调用的场景)
将4个矩阵封装为单行的元素列表,对应4个列名,实现每列存储对应时间点的完整二维矩阵:
import pandas as pd import numpy as np # 示例矩阵定义 A0 = np.array([[1,2,3],[3,4,5]]) A1 = np.array([[0,2,0],[3,4,0]]) A2 = np.array([[1,0,3],[0,4,5]]) A3 = np.array([[1,2,0],[3,0,5]]) # 构造DataFrame df = pd.DataFrame([[A0, A1, A2, A3]], columns=['day_0','day_1','day_2','day_3'])
调用示例:获取day_0对应的完整矩阵,执行df['day_0'].iloc[0]即可返回原A0数组。
方案2:打平矩阵存储为结构化数据(适合需要做数值运算、按位置取值的场景)
将每个二维矩阵打平为1维数组,用单独的列标记矩阵元素的行、列索引,既保留原矩阵的所有信息,也可以直接使用Pandas的数值计算方法:
m, n = A0.shape # 生成矩阵元素对应的行、列索引(0基) row_idx = np.repeat(np.arange(m), n) col_idx = np.tile(np.arange(n), m) # 构造结构化数据 df = pd.DataFrame({ 'row_idx': row_idx, 'col_idx': col_idx, 'day_0': A0.flatten(), 'day_1': A1.flatten(), 'day_2': A2.flatten(), 'day_3': A3.flatten() })
调用示例:
- 取A0矩阵第0行第1列的数值:
df.loc[(df['row_idx']==0) & (df['col_idx']==1), 'day_0'].values[0] - 恢复day_0对应的完整矩阵:
df['day_0'].values.reshape(m, n)
内容的提问来源于stack exchange,提问作者Raz
相关产品推荐
相关产品推荐

