如何在Python中删除DataFrame中非欧洲与非洲区域的行?
解决Pandas筛选多区域行的问题
当然可以用逻辑或实现同时保留欧洲和非洲区域行的需求!你之前尝试没成功,大概率是误用了Python原生的or运算符——在Pandas的布尔索引场景里,我们需要用按位或运算符|,而不是普通的or,原因是Pandas处理的是布尔数组而非单个布尔值。
下面给你两种可行的实现方式:
方法一:使用按位或运算符|
记得给每个条件单独加括号(因为==的优先级高于|,不加括号会导致运算顺序错误):
df1 = df1.loc[(df1["region"] == "Europe") | (df1["region"] == "Africa")]
方法二:使用isin()方法(更简洁)
如果需要筛选的区域值较多,用isin()会更直观且不易出错,它可以直接匹配列表中的所有取值:
df1 = df1.loc[df1["region"].isin(["Europe", "Africa"])]
简单解释下为什么or不行:Python的or是用来判断单个布尔值的真假逻辑,而Pandas的布尔索引需要返回一个和原DataFrame行数一致的布尔数组,|会对数组中的每个元素执行按位或操作,这才是我们需要的逐行判断逻辑。
内容的提问来源于stack exchange,提问作者Jeankrikri
相关产品推荐
相关产品推荐

