我有这些代码片段
deal['incash_potential'] = np.where(
np.vectorize(lambda x, y: x != None and y != None)(deal.present_value, deal.fee),
np.vectorize(lambda x, y: np.dot(x, y))(deal.fee, deal.present_value),
None
)
Deal is a pandas Dataframe
在deal.fee列中,我有一些可空值(python None),但当a运行此代码时,它会向我提出:
np.vectorize(lambda x, y: np.dot(x, y))(deal.fee, deal.present_value),
^^^^^^^^^^^^
File "<__array_function__ internals>", line 200, in dot
TypeError: unsupported operand type(s) for *: 'float' and 'NoneType'
列deal.present_value没有可空值,它们都是浮点型
为什么NP.过滤器不工作?
1条答案
按热度按时间ajsxfq5m1#
当使用
np.where(cond, a, b)
时,它将首先计算a
和b
,然后根据条件选择返回哪个值。这对你来说意味着numpy试图计算 * 整个 * 数据集的np.dot(x,y)
(本质上是deal.present_value
和deal.fee
的元素乘积之和),但它不能,因为这需要将float
乘以None
。我想你想把
deal.present_value
和deal.fee
的乘积(你只有两个数字,所以点积是不必要的)都不是None
,如果它们中的任何一个是None
,就把None
。不使用
np.where
,您可以使用列表解析,并在满足条件时获取产品。输出: