2017-05-30 9 views
2

データフレームを仮定すると、nx mのサイズのパンダを使用してdfとなります。Scipyでのpandasデータフレームの使用

dfで線形代数演算を実行したいと思います。

これまで、私はdfに直接線形代数を変換する方法を見つけることができませんでした。私は見つけることができたことは使ってnumpyのにパンダの形式からDFを変換する方法である。そして、私はあるSimpy

linalg.inv(A) 

を行うことができます

A = DataFrame.as_matrix 

をscipyのダウンロードに線形動作を行う直接的な方法はありますpandasデータフレームを使用していますか?私が代わりにnumpyののscipyのダウンロードから線形代数演算を使用したい理由が基づいている

linalg.inv(df) 

:例えばどのような場合には

、scipyのダウンロードは、線形のより完全な機能を備えたバージョンが含まれています代数モジュール、その他数多くの数値アルゴリズムが含まれます。あなたがPythonで科学的コンピューティングをしているのであれば、おそらくNumPyとSciPyの両方をインストールするべきです。ほとんどの新機能はNumPyではなくSciPyに属しています。

What-is-the-difference-between-NumPy-and-SciPy

+1

両方 'pandas'と' scipy'がnumpy' '上に構築されています。ほとんどの 'scipy'コードは、入力が配列であると仮定したり、そのようなものに変換することができます。 'scipy' 'inv'は入力をnumpy配列に変換します(' np.asarray')。データフレームがscipy関数で動作するのは、配列に変換できるからです。 – hpaulj

答えて

2

からあなたは直接あなたのデータフレーム上でそれを使用することができます。

デモ:私はこのデモのためにPandas 0.19.2SciPy 0.18.1を使用

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。

UPDATE:あなたは結果としてデータフレームを取得したい場合:

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 
+0

一度あなたの例でinv(df)を実行すると、Numpy配列を取得できますか? – Eagle

+0

@Eagle、それが正しいかどうかは言えません...質問は - あなたは何を達成したいですか? ;-) – MaxU

関連する問題