python - Vectorization & ValueError,但不是来自“or”和“and”运算符
问题描述
这个问答链很好地解释了如何解决使用条件时出现的 ValueErrors,例如“或”而不是 |,以及“和”而不是 &。但我在该链中看不到任何解决“ValueError,Series 的真值不明确的问题。使用 a.empty、a.bool()、a.item()、a.any() 或a.all()" 用于向量化,当尝试将向量化与编写为将单个数字作为输入的函数一起使用时。
具体来说,在这种情况下,Map 和 Apply 可以正常工作,但 Vectorization 仍然会抛出 ValueError。
下面的代码,有人可以分享如何解决这个问题,以便可以在不修改函数(或不过多修改函数)的情况下使用矢量化?谢谢!
代码:
# import numpy and pandas, create dataframe.
import numpy as np
import pandas as pd
x = range(1000)
df = pd.DataFrame(data = x, columns = ['Number'])
# define simple function to return True or False if number passed in is prime
def is_prime(num):
if num < 2:
return False
elif num == 2:
return True
else:
for i in range(2,num):
if num % i == 0:
return False
return True
# Call various ways of applying the function to the data frame
df['map prime'] = list(map(is_prime, df['Number']))
df['apply prime'] = df['Number'].apply(is_prime)
# look at dataframe
in: df.head()
out: Number map prime apply prime
0 0 264 False False
1 1 907 False False
2 2 354 True True
3 3 583 True True
4 4 895 False False
# now try to vectorizing
in: df['optimize prime'] = is_prime(df['Number'])
out: ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
解决方案
你可以试试 numpy 的vectorize
:
vis_prime = np.vectorize(is_prime)
df['optimize prime'] = vis_prime(df['Number'])
这给了你:
Number map prime apply prime optimize prime
0 0 False False False
1 1 False False False
2 2 True True True
3 3 True True True
4 4 False False False
推荐阅读
- machine-learning - 崩溃后继续训练 style-gan 2 网络
- google-cloud-platform - 无法将预训练模型上传到 AI Platform
- python - Fastai - CUDA 错误:触发了设备端断言
- mariadb - SuiteCRM 中保存字段的问题:行大小太大
- swift - 在不使用 AnyView 的情况下扩展具有额外功能的视图
- java - 使用 JPQL 和 BooleanExpression 进行分页
- c# - 如何确保通知 EFCore 实体的编辑(IsEdited 或其他)状态
- python - 在 Numpy Python 中从零开始正交线性回归的梯度下降推导
- javascript - 多个动态创建的输入字段值不能超过指定数量
- laravel - laravel-datepicker 没有显示?