【发布时间】:2019-08-20 15:06:55
【问题描述】:
我正在尝试将 IF 函数应用于数据框中的列。很简单,如果工资超过 50,000 英镑,我希望它返回“超过 50,000 英镑”,如果低于,我希望它返回“低于 50,000 英镑”。
我已经尝试了下面的代码,但我遇到了错误消息。我已经对在处理数据帧时使用 apply 函数进行了一些研究,因此定义了一个函数并使用了下面的第二段代码,但得到了第二条错误消息。
salary = employees['Salary']
if Salary > 50000:
print('Over £50,000')
else:
print('Under £50,000')
申请方法
def SalaryCheck():
if Salary > 50000:
print('Over £50,000')
else:
print('Under £50,000')
employees.Salary.apply(SalaryCheck)
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Users\Peter\PycharmProjects\untitled\venv\lib\site- packages\pandas\core\generic.py", line 1556, in __nonzero__
self.__class__.__name__
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
应用方法警告
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Users\Peter\PycharmProjects\untitled\venv\lib\site- packages\pandas\core\series.py", line 4038, in apply
mapped = lib.map_infer(values, f, convert=convert_dtype)
【问题讨论】:
-
def SalaryCheck(x)然后检查if x > 50000,尽管这可以在不使用np.where的情况下完成。见stackoverflow.com/questions/19913659/… -
嗨彼得,我很确定你的问题是由于你的
SalaryCheck函数没有为它定义任何参数,所以if Salary > 50000看起来实际上是指数据框中的每一份薪水,而不是任何一个特定的薪水。 Gokul的回答应该对你有所帮助。也就是说,这个问题是由一个简单的印刷问题引起的,因此很可能作为本网站的题外话而被关闭。 -
Peter,在您的第一个示例中,大写
Salary定义在哪里?至于第二个,这似乎是对错误消息的更好解释,值得了解以了解 pandas 为何不高兴:stackoverflow.com/a/45494393/5590742(编辑:将旧评论替换为更清晰的链接)。
标签: python pandas dataframe if-statement