pandas-按条件取行实例、原理详解,以及取非集

不取非集(后面会提到)

import pandas as pd
a=pd.read_csv("head.csv")
a
idshujulabel
013postive
127negative
257postive
368postive
435negative

现在我们想取 比如 shuju这一列 小于等于7的

b=a[a['shuju']>=4]
b
idshujulabel
127negative
257postive
368postive
435negative

现在我们想取 比如 shuju这一列 小于等于7大于等于4的

b=a[a['shuju']<=7&&a['shuju']>=4]
  File "<ipython-input-13-2ca594e63fc5>", line 1
    b=a[a['shuju']<=7&&a['shuju']>=4]
                      ^
SyntaxError: invalid syntax

可以看到,上面的式子会报错,在那个&号那里

#############我们改成单个&
b=a[a['shuju']<=7&a['shuju']>=4]
---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-14-eee3584da3f0> in <module>()
      1 #############我们改成单个&
----> 2 b=a[a['shuju']<=7&a['shuju']>=4]


~/.local/lib/python3.5/site-packages/pandas/core/generic.py in __nonzero__(self)
   1467         raise ValueError("The truth value of a {0} is ambiguous. "
   1468                          "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
-> 1469                          .format(self.__class__.__name__))
   1470 
   1471     __bool__ = __nonzero__


ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

可以发现,上面的式子仍然会报错,但是错误比原来轻了

#############我们给单个式子加个括号
b=a[(a['shuju']<=7)&(a['shuju']>=4)]
b
idshujulabel
127negative
257postive
435negative

现在就可以了!!!!
就是两个要点!!! ①逻辑运算符只能要一个 ②需要给每个逻辑表达式单独的加个括号

对这种按条件取行的原理的解释

a['shuju']>=4
0    False
1     True
2     True
3     True
4     True
Name: shuju, dtype: bool

可以看到,上面的逻辑表达式,会将’shuju’ 那一列的每一个元素与4进行比较,比4大的,就成True

a[a['shuju']>=4]
idshujulabel
127negative
257postive
368postive
435negative

上面这步操作,实际上就是用一个bool的series来取行,那个series为True的行都会被取出来

取非集(比如 取除了小于等于7大于等于4之外的其他行)

通过上面对原理的解释,我们知道,其实按条件取行,也就是把 True的行取出来而已,
现在想要把那些不是True的行取出来,
其实就是把原来是True的行变成False,False变成True就行啦!!!

也就是一个使用一个apply+lambda 将False的映射为True ,True映射为False即可

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值