假设一个数据帧 df ,使用大小为n x m的pandas。
我想在 df 上执行线性代数运算。
到目前为止,我无法找到在 df 上直接执行线性代数的方法。我能找到的是如何使用以下方法将 df 从pandas格式转换为Numpy:
A = DataFrame.as_matrix
然后我可以简单地做
linalg.inv(A)
是否有使用pandas数据帧在Scipy中执行线性操作的直接方法?例如:
linalg.inv(df)
我想使用scipy代替Numpy的线性代数运算的原因是基于:
无论如何,SciPy包含更多全功能版本的线性代数模块,以及许多其他数值算法。如果你使用python进行科学计算,你应该安装NumPy和SciPy。大多数新功能属于SciPy而非NumPy。
答案 0 :(得分:2)
您可以直接在DataFrame上使用它。
演示:
In [111]: from scipy.linalg import inv
In [112]: df = pd.DataFrame(np.random.rand(5,5), columns=list('abcde'))
In [113]: df
Out[113]:
a b c d e
0 0.619086 0.229390 0.361611 0.857177 0.274983
1 0.389630 0.689562 0.687043 0.388781 0.781168
2 0.702920 0.253870 0.881173 0.858378 0.363035
3 0.007022 0.571111 0.408729 0.708862 0.042882
4 0.876747 0.170775 0.499824 0.929295 0.762971
In [114]: inv(df)
Out[114]:
array([[ 5.67652746, 1.54854922, -0.21927114, -3.04884324, -3.35567433],
[ 4.32996215, 1.99787442, -1.18579234, -0.9802008 , -2.98677673],
[-2.43833426, -0.29287732, 2.11691208, 0.34655505, 0.1519223 ],
[-1.92398165, -1.43903773, -0.22722582, 1.96404685, 2.16451337],
[-3.55144126, -0.28205091, -0.59264783, 1.10366465, 3.09938364]])
PS我使用Pandas 0.19.2
和SciPy 0.18.1
进行此演示。
更新:如果您想获得DataFrame:
In [4]: pd.DataFrame(inv(df), columns=df.columns, index=df.index)
Out[4]:
a b c d e
0 5.676507 1.548541 -0.219275 -3.048828 -3.355657
1 4.329938 1.997865 -1.185791 -0.980187 -2.986760
2 -2.438323 -0.292872 2.116913 0.346547 0.151914
3 -1.923971 -1.439034 -0.227226 1.964040 2.164506
4 -3.551428 -0.282045 -0.592647 1.103655 3.099373