Pandas中DataFrame视为矩阵做乘积报错:如何解决对齐问题?
解决Pandas矩阵乘法"matrices are not aligned"错误
问题原因
Pandas的DataFrame.dot()方法并非单纯按矩阵形状匹配计算,而是会通过DataFrame的列名与另一个对象的索引名对齐来执行乘法。你的df1列名为col1、col2,而df2的行索引是默认的0、1,两者无匹配项,因此触发对齐错误。
修复方案
方案1:直接使用Numpy矩阵乘法(忽略Pandas索引对齐)
提取DataFrame底层的Numpy数组,用纯矩阵运算计算,再转回DataFrame:
import pandas as pd import numpy as np data1 = {'col1': [1, 2, 3], 'col2': [4, 5, 6]} df1 = pd.DataFrame(data1) data2 = {'col3': [2,3]} df2 = pd.DataFrame(data2) # 使用@运算符(Python 3.5+支持,推荐写法) result = pd.DataFrame(df1.values @ df2.values, columns=['matrix_product']) # 或者用np.dot实现 # result = pd.DataFrame(np.dot(df1.values, df2.values), columns=['matrix_product'])
方案2:对齐df2的索引与df1的列名
修改df2的行索引,让它和df1的列名完全匹配,这样Pandas的dot()就能正常工作:
import pandas as pd data1 = {'col1': [1, 2, 3], 'col2': [4, 5, 6]} df1 = pd.DataFrame(data1) data2 = {'col3': [2,3]} df2 = pd.DataFrame(data2) # 将df2的索引设置为df1的列名 df2.index = df1.columns result = df1.dot(df2)
结果说明
两种方法都会得到3×1的结果矩阵:
matrix_product 0 14 1 19 2 24
内容的提问来源于stack exchange,提问作者Hans
相关产品推荐
相关产品推荐

