【发布时间】:2022-01-11 06:37:18
【问题描述】:
尝试查看类似的问题 (ValueError: The truth value of a DataFrame is ambiguous),但答案出乎我的意料,我是在 IF 语句不起作用的上下文中询问的,并且在将字符串转换为我的数字时出现问题
我正在尝试对数据表的一行进行验证。标准是找到type等于'employees-full-time'并且value(这是我需要转换为数字值的字符串)大于或等于min_value的行。
我无法让它工作。以下是我的问题和错误的详细信息:
数据框数据类型
category object
type object
value object
value_type object
mandatory bool
min_value float64
脚本
# validate full time employees value
if df.loc[(df['type'] == 'employees-full-time') & (df['value'].astype(int) >= df['min_value'])]:
print('full time employees cool')
else:
print('full time employees not so cool')
错误
ValueError: invalid literal for int() with base 10: 'true'
如果我减少脚本以排除第二个条件,它会抱怨:
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
感谢您的宝贵时间
【问题讨论】:
-
@esqew 我试过那个,但我一点也不明白
-
'true' 不能转换为
int,因为它不是整数。布尔值True可以转换为整数(0 或 1),因为布尔值是二进制的,而不是字符串。因此,请检查您的数据以确保它对您正在尝试做的事情有意义。第二个错误是因为您询问if ...并提供数据框作为输出。没有我认为您期望的逐行操作输出,它不会占用每一行并通过if运行它。您可以创建一个新列来查找哪些为真,或者如果条件为真,则使用df.any(),对所有都相同 -
@fam-woodpecker 感谢您的帮助,
df['value']是存储在字符串对象中的数字。 "6" 但min_value是一个浮点数。我试图找到type== employees-full-time 的行,并将字符串值 6 视为一个数字,以确保提交的数字大于或等于min_value。我想要的结果是条件上的真或假 -
当我为测试创建列时
df['test'] = np.where(df['type'] == 'employees-full-time') & (df['value'] == '6')工作正常,但这只是因为我将字符串对象与硬编码为“6”的字符串值进行了比较。在这种情况下,我需要value将其视为浮点数,并与同一行中已经是浮点数的另一个值进行比较
标签: python