关于python:将pandas数据框与Scipy一起使用

Using pandas dataframe with Scipy

假设数据帧为df,使用大小为n x m的熊猫。

我想在df上执行线性代数运算。

直到现在,我还没有找到一种方法可以在df上直接执行线性代数。我能找到的是如何使用以下方法将df从pandas格式转换为numpy格式:

1
A = DataFrame.as_matrix

那么我可以简单地做

1
linalg.inv(A)

有没有一种直接使用熊猫数据帧在scipy中执行线性操作的方法?例如:

1
linalg.inv(df)

我想使用scipy而不是numpy的线性代数运算的原因基于:

In any case, SciPy contains more fully-featured versions of the linear algebra modules, as well as many other numerical algorithms. If you are doing scientific computing with python, you should probably install both NumPy and SciPy. Most new features belong in SciPy rather than NumPy.

麻木和坐骨神经痛的区别是什么?


您可以直接在数据帧上使用它。

演示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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]])

我在这个演示中使用了Pandas 0.19.2SciPy 0.18.1

更新:如果要获取数据帧,结果是:

1
2
3
4
5
6
7
8
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