Python 评估熊猫的价值观

Python 评估熊猫的价值观,python,pandas,Python,Pandas,假设我有一个这样的数据帧 20 28 25 19 2 4 22 E 4 =E19*E20*E22 =E2*E4 0.001 860 0.80 =SUM(D22:D28) D 4 =D19*D20*D22 =D2*D4 0.001 880 0.80 =SUM(C22:C28) C 3 =C19*C20*C22 =C2*C4 0.001 900 0.90 =SU

假设我有一个这样的数据帧

   20            28      25     19     2     4             22
E   4  =E19*E20*E22  =E2*E4  0.001   860  0.80  =SUM(D22:D28)
D   4  =D19*D20*D22  =D2*D4  0.001   880  0.80  =SUM(C22:C28)
C   3  =C19*C20*C22  =C2*C4  0.001   900  0.90  =SUM(B22:B28)
F   3  =F19*F20*F22  =F2*F4  0.001   840  0.70  =SUM(E22:E28)
B   4  =B19*B20*B22  =B2*B4  0.001  1000  0.95              0
G   4  =G19*G20*G22  =G2*G4  0.002   800  0.60  =SUM(F22:F28)
我需要计算公式并将其放回同一行、列。例如
E25
的值为
“=E2*E4”
,我需要评估
E2
E4
,然后将其放回
E25

我怎样才能做到这一点

这是到目前为止的代码

import re

d = {
    "B2": 1000,
    "C2": 900,
    "D2": 880,
    "E2": 860,
    "F2": 840,
    "G2": 800,
    "B4": 0.95,
    "C4": 0.90,
    "D4": 0.80,
    "E4": 0.80,
    "F4": 0.70,
    "G4": 0.60,
    "B19": 0.001,
    "C19": 0.001,
    "D19": 0.001,
    "E19": 0.001,
    "F19": 0.001,
    "G19": 0.002,
    "B20": 4,
    "C20": 3,
    "D20": 4,
    "E20": 4,
    "F20": 3,
    "G20": 4,
    "B25": "=B2*B4",
    "C25": "=C2*C4",
    "D25": "=D2*D4",
    "E25": "=E2*E4",
    "F25": "=F2*F4",
    "G25": "=G2*G4",
    "B22": 0,
    "C22": "=SUM(B22:B28)",
    "D22": "=SUM(C22:C28)",
    "E22": "=SUM(D22:D28)",
    "F22": "=SUM(E22:E28)",
    "G22": "=SUM(F22:F28)",
    "B28": "=B19*B20*B22",
    "C28": "=C19*C20*C22",
    "D28": "=D19*D20*D22",
    "E28": "=E19*E20*E22",
    "F28": "=F19*F20*F22",
    "G28": "=G19*G20*G22",
}

a = list()


def split_inp(inp):
    return re.match(r"([a-z]+)([0-9]+)", inp, re.I)


for k, v in d.items():
    match = split_inp(k)
    a.append((match.groups(), v))

import pandas as pd

df = pd.DataFrame()

formula_ = []
for i, j in a:
    if isinstance(j, str) and j.startswith('=') and not j[1:].startswith('S'):
        formula_.append((i, j))

    df.set_value(i[0], i[1], j)

print(df)

operators = ['+', '-', '/', '*']
print(formula_)


def split_op(inp):
    for i in operators:
        if i in inp:
            return inp.partition(i)


for i, j in formula_:
    j = j[1:]
    match = split_op(j)
    print(match)
    g = split_inp(match[0])
    f = split_inp((match[2]))
    new = (g.groups(), match[1], f.groups())
    # print(new)
    # df.set_value(i[0], [1], df.query(new[0][0], new[]))


# if isinstance(j, str) and j.startswith('=') and not j[1:].startswith('S'):
#     j = j[1:]
#     print(j)
#     df.set_value(i[0], i[1], pd.eval(j))
# else:
#     pass

既然Excel最擅长计算公式,为什么不让Excel计算公式,然后将结果导出到pandas?这看起来像是白白做了很多工作。(您实际上是在尝试在pandas中复制Excel的公式功能!)因为我以JSON的形式获取这些数据,需要计算公式并用计算出的值返回响应。这是一个金融应用程序。你不能和JSON的制作人谈谈吗?如果你试图解析公式,你真的在为自己创造一个痛苦的世界。如果未来的JSON有一个你不期望的公式呢?