我在一个函数的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'
1条答案
按热度按时间odopli941#
可以使用以下命令更改最后两行:
这种方法对于大的 Dataframe 会更快的工作。你可以使用矢量化的方法来更快的得到结果。