パンダのDataFrameをExcelスプレッドシートと同じように扱うことはできますか?つまり、他の列の変数が変更されたときに、この列は自動的に変わりますか?ような何か:パンダに値の代わりに式を格納する方法DataFrame
a b c
2 3 =a+b
だから、私は2または3を更新し、列c
も自動的に更新されます。
PS:これは明らかにa+b
を返す関数を書くことは可能ですが、この方法で行列を扱うためのpandasや他のPythonライブラリの組み込み関数はありますか?
パンダのDataFrameをExcelスプレッドシートと同じように扱うことはできますか?つまり、他の列の変数が変更されたときに、この列は自動的に変わりますか?ような何か:パンダに値の代わりに式を格納する方法DataFrame
a b c
2 3 =a+b
だから、私は2または3を更新し、列c
も自動的に更新されます。
PS:これは明らかにa+b
を返す関数を書くことは可能ですが、この方法で行列を扱うためのpandasや他のPythonライブラリの組み込み関数はありますか?
これは
In [19]: df = DataFrame(randn(10,2),columns=list('ab'))
In [20]: df
Out[20]:
a b
0 0.958465 0.679193
1 -0.769077 0.497436
2 0.598059 0.457555
3 0.290926 -1.617927
4 -0.248910 -0.947835
5 -1.352096 -0.568631
6 0.009125 0.711511
7 -0.993082 -1.440405
8 -0.593704 0.352468
9 0.523332 -1.544849
これは
In [21]: formulas = { 'c' : 'df.a + df.b' }
In [22]: def update(df,formulas):
for k, v in formulas.items():
df[k] = pd.eval(v)
In [23]: update(df,formulas)
In [24]: df
Out[24]:
a b c
0 0.958465 0.679193 1.637658
1 -0.769077 0.497436 -0.271642
2 0.598059 0.457555 1.055614
3 0.290926 -1.617927 -1.327001
4 -0.248910 -0.947835 -1.196745
5 -1.352096 -0.568631 -1.920726
6 0.009125 0.711511 0.720636
7 -0.993082 -1.440405 -2.433487
8 -0.593704 0.352468 -0.241236
9 0.523332 -1.544849 -1.021517
あなたは上SetItem関数にフックを実装することができます(すぐに)'a + b'
として可能になります(まだ開発中)0.13で動作しますデータフレームは、このタイプの機能を自動的に呼び出します。しかし、かなりトリッキーです。あなたは指定していませんどのようにフレームが最初に更新されます。おそらく、値を変更した後でupdate関数を呼び出すのが最も簡単なのでしょうか?
現在のところ、これを正確に記述する方法はありません。
パンダ0.13には、DataFrame
の「コンテキスト」内の式を評価できる新しいDataFrame.eval
メソッドがあります。たとえば、df['c'] = df.eval('a + b')
になります。
わかりませんが、私は誤ってxlwt.FormulaオブジェクトをDataFrameセルに格納してから、DataFrame.to_excelメソッドを使用してDataFrameをエクスポートしてExcelその中の式:
import pandas
import xlwt
formulae=[]
formulae.append(xlwt.Formula('SUM(F1:F5)'))
formulae.append(xlwt.Formula('SUM(G1:G5)'))
formulae.append(xlwt.Formula('SUM(H1:I5)'))
formulae.append(xlwt.Formula('SUM(I1:I5)'))
df=pandas.DataFrame(formula)
df.to_excel('FormulaTest.xls')
...それを試してみてはevalのサポート機能では、文字列など、DF [ 'C'] = df.eval( 'a.diff()+ B')を行います? – bigbug
いいえ。関数呼び出しの結果を変数に格納します。 –
次のバージョンで関数サポートを文字列に追加することはできますか?パフォーマンスの向上はありません。そのために、データフレームはユーザ入力式を受け入れ、それに応じて結果をcaculateします。 (私の現在の解決策は、式を解析して修正するためにpyparsingを使用していますが、やや醜いexecを実行しています) – bigbug