如何在pandas DataFrame中存储公式而不是值

Ant*_*nko 8 python pandas

是否可以像使用Excel电子表格一样使用pandas DataFrame:例如,通过在列中输入公式,以便当其他列中的变量发生更改时,此列中的值会自动更改?就像是:

a  b  c
2  3  =a+b
Run Code Online (Sandbox Code Playgroud)

因此,当我更新2或3时,该列c也会自动更新.

PS:显然可以写一个函数来返回a+b,但是pandas或其他Python库中是否有任何内置函数可以用这种方式处理矩阵?

Jef*_*eff 12

这将在0.13(仍在开发中)工作

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
Run Code Online (Sandbox Code Playgroud)

这可能会'a + b'(很快)

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
Run Code Online (Sandbox Code Playgroud)

可以在数据框上实现对setitem的挂钩,以自动调用此类函数.但相当棘手.没有指定如何框架在首位更新.更改值后,简单地调用更新函数可能是最简单的


小智 9

我不知道它是你想要的,但我偶然发现你可以在DataFrame单元格中存储xlwt.Formula对象,然后使用DataFrame.to_excel方法将DataFrame导出为ex​​cel并在其中包含你的公式:

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')
Run Code Online (Sandbox Code Playgroud)

试试吧...

  • 它看起来不像OP想要将东西导出到Excel.这篇文章是关于使用pandas DataFrame模仿Excel行为. (4认同)
  • 虽然@jtornero回答了一个不同的问题,但他回答了我的问题,我很感激! (3认同)