【问题标题】:How to write this python condition in single line如何在单行中编写此 python 条件
【发布时间】:2020-09-07 05:53:23
【问题描述】:

我有一个包含一些数据的数据框。我想在这个数据框上应用一个条件。

当我这样写代码时:-

import pandas as pd 
data_store = pd.read_excel("101010.xlsx") 
fff = data_store[data_store.Price > 20] 
print(fff.sort_values("Total Sale", ascending=False))

程序正在运行并返回(显示)我想要的数据框元素值,如下所示:-

Total Sale      Price
100000           64
95000            21
94000            25
70000            30
61000            41
59000            23
54000            50
40000            55

但是当我像这样在单行中编写该代码时:-

import pandas as pd
data_store = pd.read_excel("101010.xlsx")
fff = (data_store[data_store.Price > 20]) and (data_store.sort_values("Total Sale", ascending=False))
print(fff)

我收到这样的错误:-

  Traceback (most recent call last):
  File "C:/Users/Moli/PycharmProjects/first/main.py", line 3, in <module>
  fff = (data_store[data_store.Price > 20]) and (data_store.sort_values("Total Sale", 
  ascending=False))
  File "C:\Python37\lib\site-packages\pandas\core\generic.py", line 1327, in __nonzero__
  f"The truth value of a {type(self).__name__} is ambiguous. "
  ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() 
  or a.all().
   
  Process finished with exit code 1

请一些人帮助我。 我怎么能像这样在单行中写这个条件:-

(data_store[data_store.Price > 20]) and (data_store.sort_values("Total Sale", ascending=False))

提前谢谢你:) :) :)

【问题讨论】:

  • data_store[data_store.Price &gt; 20].sort_values("Total Sale", ascending=False) 可以为你工作@Amelia
  • @ShivamJha sort_values 返回排序后的df还是原地执行?因为如果它在适当的位置执行它,您将不会引用已排序和过滤的数据帧。
  • @Adirio Pandas sort_values() 函数按传递的列的升序或降序对数据框进行排序。它与sorted() Python 函数不同,因为它不能对数据框进行排序并且不能选择特定的列。语法:DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind=’quicksort’, na_position=’last’)
  • @ShivamJha 我知道sort_values 做了什么,我问它是在原地完成的,还是返回了排序的数据帧。答案是它默认返回排序后的数据帧,并且有一个参数可以做到这一点,所以你提出的解决方案确实有效。

标签: python python-3.x


【解决方案1】:

and 是一个逻辑与,它比较前面和后面的语句,将它们评估为布尔值并执行逻辑与。

你的上一个和下一个陈述是:

data_store[data_store.Price > 20]
data_store.sort_values("Total Sale", ascending=False)

两者都返回一个数据帧(按价格过滤),所以基本上你正在尝试对两个数据帧进行逻辑和操作。正如错误报告的那样,数据框没有布尔值,它是不明确的。

总而言之,and 不会连接动作,它会执行逻辑与,在数据帧无法转换为布尔值之前中断。

正如@ShivamJha 在评论中指出的那样,您想要做的是:

import pandas as pd 


data_store = pd.read_excel("101010.xlsx") 
fff = data_store[data_store.Price > 20].sort_values("Total Sale", ascending=False)
print(fff)

【讨论】:

    猜你喜欢
    • 2022-09-29
    • 1970-01-01
    • 2022-01-15
    • 2020-10-02
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    相关资源
    最近更新 更多