为什么Pandas评估不再和where合作了?

jk9hmnmh  于 2022-12-28  发布在  其他
关注(0)|答案(1)|浏览(140)

我在一个函数的where中使用pandas eval来创建一个数据框中的列。虽然它在过去是有效的,但现在不是了。我们的dataiku软件最近转向了Python 3。这可能是原因吗?
下面是现在使用的代码

import pandas as pd, numpy as np
from numpy import where, nan

d = {'ASSET': ['X','X','A','X','B'], 'PRODUCT': ['Z','Y','Z','C','Y']}
MAIN_df = pd.DataFrame(data=d)

def val_per(ASSET, PRODUCT):
    return(
            where(pd.eval("ASSET== 'X' & PRODUCT == 'Z'"),0.04,
                  where(pd.eval("PRODUCT == 'Y'"),0.08,1.5)
                 )
           )

MAIN_2_df = (MAIN_df.eval("PCT = @val_per(ASSET, PRODUCT)"))

现在收到的错误是〈class 'TypeError'〉:不可散列类型:'numpy.ndarray'

odopli94

odopli941#

可以使用以下命令更改最后两行:

MAIN_2_df = MAIN_df.copy()

MAIN_2_df =  val_per(MAIN_2_df.ASSET, MAIN_2_df.PRODUCT)

这种方法对于大的 Dataframe 会更快的工作。你可以使用矢量化的方法来更快的得到结果。

相关问题