如何删除Pandas DataFrame中a列值为0且b列非0的行?
解决方法
你用and报错的核心原因是:Python原生的and只能处理单个布尔值判断,而df['a'] == 0返回的是一个布尔数组(Series类型),必须用pandas支持的**按位与运算符&**来组合这类数组条件,同时每个条件要加括号避免运算符优先级冲突。
针对你的需求,有两种常用实现方式:
方法一:直接筛选保留符合要求的行
我们需要保留**不满足「a列值为0且b列值不为0」**的行,可以用取反运算符~结合按位与&实现:
import pandas as pd df = pd.DataFrame({'a':[0,2,3],'b':[1,3,4],'c':[4,1,2]}) # 保留不满足删除条件的行 df = df[~((df['a'] == 0) & (df['b'] != 0))]
也可以直接写等价的保留条件(a≠0 或者 b=0):
df = df[(df['a'] != 0) | (df['b'] == 0)]
方法二:通过索引删除目标行
先定位要删除的行的索引,再用drop方法删除:
import pandas as pd df = pd.DataFrame({'a':[0,2,3],'b':[1,3,4],'c':[4,1,2]}) # 获取需要删除的行的索引 drop_rows = df[(df['a'] == 0) & (df['b'] != 0)].index # 删除指定索引的行 df = df.drop(drop_rows)
两种方法执行后,最终结果都是:
a b c 1 2 3 1 2 3 4 2
内容的提问来源于stack exchange,提问作者User1917931829
相关产品推荐
相关产品推荐

