是否可以像使用Excel电子表格一样使用pandas DataFrame:例如,通过在列中输入公式,以便当其他列中的变量发生更改时,此列中的值会自动更改?类似的东西:
a b c
2 3 =a+b
因此,当我更新2或3时,列c
也会自动更新。
PS:显然可以编写一个返回a+b
的函数,但是pandas或其他Python库中是否有内置函数可以用这种方式处理矩阵?
答案 0 :(得分: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
这可以'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
您可以在数据框上实现 setitem 的挂钩,以自动调用此类型的函数。但相当棘手。您没有在第一时间指定如何更新框架。更改值
后,简单地调用更新函数可能是最简单的答案 1 :(得分:6)
我不知道它是你想要的,但我偶然发现你可以在DataFrame单元格中存储xlwt.Formula对象,然后使用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')
试试吧......
答案 2 :(得分:3)
目前无法以您描述的方式完全执行此操作。
在pandas 0.13中,将有一个新的DataFrame.eval
方法,允许您在DataFrame
的“上下文”中评估表达式。例如,您将能够df['c'] = df.eval('a + b')
。