在pandas模块中,逻辑运算符有以下几种:
1.&表示并且
2.|表示或者
3.~表示非
1. &(并且)运算符
当且仅当运算符两边的布尔值均为 True 时,运算结果才为 True,其他情况为 False。
a = True b = True c = False print(a & b) # 输出: True print(a & c) # 输出: False print(b & c) # 输出: False |
在Pandas中使用 &
进行多条件筛选
import pandas as pd # 创建一个示例DataFrame data = pd.DataFrame({ 'A': [1, 2, 3, 4], 'B': [4, 3, 2, 1] }) # 筛选出 A 列大于 1 并且 B 列小于 4 的行 filtered_data = data[(data['A'] > 1) & (data['B'] < 4)] print(filtered_data) |
2. |(或者)运算符
当运算符两边的布尔值中至少有一个为 True 时,运算结果就为 True,仅当两边的布尔值都是 False 时结果才为 False。
a = True b = False c = False print(a | b) # 输出: True print(b | c) # 输出: False print(a | c) # 输出: True |
在Pandas中使用 |
进行多条件筛选:
import pandas as pd # 创建一个示例DataFrame data = pd.DataFrame({ 'A': [1, 2, 3, 4], 'B': [4, 3, 2, 1] }) # 筛选出 A 列大于 2 或者 B 列小于 2 的行 filtered_data = data[(data['A'] > 2) | (data['B'] < 2)] print(filtered_data) |
3. ~(非)运算符
仅有一个布尔值参与运算,运算结果为对这个布尔值取反,即 True 变为 False,False 变为 True。
a = True b = False print(~a) # 输出: False print(~b) # 输出: True |
在Pandas中使用 ~
进行布尔索引的取反操作:
import pandas as pd # 创建一个示例DataFrame data = pd.DataFrame({ 'A': [1, 2, 3, 4], 'B': [4, 3, 2, 1] }) # 筛选出 A 列不大于 2 的行 filtered_data = data[~(data['A'] > 2)] print(filtered_data) |
简单解释:
这一行代码的功能是使用布尔索引结合取反运算符 `~`,从 `data` 数据框中筛选出 `A` 列中不大于 `2` 的行。我们来详细解析它的工作方式:
代码总结:
import pandas as pd
# 创建一个示例DataFrame
data = pd.DataFrame({
'A': [1, 2, 3, 4],
'B': [4, 3, 2, 1]
})
筛选出 A 列不大于 2 的行
filtered_data = data[~(data['A'] > 2)]
# 打印筛选结果
print(filtered_data)
运行结果:
A B
0 1 4
1 2 3
通过 `~` 运算符,可以轻松地实现条件筛选的取反操作。
总结:
1.&(并且):运算符两边的布尔值均为True时,运算结果才为True,其他情况为False。
2.|(或者):运算符两边的布尔值至少有一个为True时运算结果就为True,仅当两边的布尔值都是False 时结果才为False。
3.~(非):仅有一个布尔值参与运算,运算结果为对这个布尔值取反。
让我们来思考以下例子:
假设在读取电商数据时,我们想要输出所有 "cutdown_price"大于0 和 "post_fee"大于0 的行,该怎么做呢?
接下来,要同时输出 "cutdown_price"大于0 和 "post_fee"大于0的行数据,就需要在一个索引中,使用 & 来连接对应的两个判断条件。 注意:当有多个判断条件时,每一个判断条件都需要用小括号( )括起来。 这时,同时满足这两个判断的行数据就会被筛选出来 |
# 导入pandas模块,并以"pd"为该模块的简写 import pandas as pd # 使用pd.read_csv() 函数读取路径为 "/Users/yequ/电商数据清洗.csv" 的CSV文件,并将结果赋值给变量data data = pd.read_csv("/Users/yequ/电商数据清洗.csv") # 使用print()和布尔索引 # 输出"cutdown_price"这一列值里大于0 # 和"post_fee"这一列值里大于0的行 print(data[(data["cutdown_price"]>0) & (data["post_fee"]>0)]) |
|
代码具体解释:
要筛选的数据 data是需要进行筛选的DataFrame对象。 | print(data[(data["cutdown_price"]>0) & (data["post_fee"]>0)]) |
第一个中括号 第一个中括号,也就是最外面的中括号,表示对变量data进行索引。 | print(data[(data["cutdown_price"]>0) & (data["post_fee"]>0)]) |
条件表达式 中括号里的内容是一个条件表达式,用来判断cutdown_price"这一列值里是否大于0和"post_fee"这一列值是否大于0。 | print(data[(data["cutdown_price"]>0) & (data["post_fee"]>0)]) |
第一个判断条件 中括号中的第一个小括号里是第一个判断条件:判断"cutdown_price"这一列数据是否大于0。 | 第二个判断条件 中括号中的第二个小括号里是第二个判断条件:判断"post_fee"这一列数据是否大于0。 |
总结:当有多个判断条件时,每一个判断条件都需要用小括号( )括起来。
总结: