pandas中where方法的使用详解

where方法是pandas中利用布尔值来判断或处理数据一种常用方法。

格式如下:

where(cond, other=nan, inplace=False, axis=None, level=None, try_cast=False, raise_on_error=True)

返回值是与自身形状相同且对应的对象。
第一个参数cond为True的时候显示原来的值,否则就显示其他值,这些其他值可以是你在参数中指定的值。

参数:

cond:这是条件,如果cond是可调用的,则在NDFrame上进行计算,然后
    应该返回布尔值NDFrame或数组。

other:标量,NDFrame或可调用,如果其他可调用,则在NDFrame上计算
    应该返回标量或NDFrame。

inplace:布尔值,默认为False,是否对数据执行适当的操作
axis:对齐轴,默认为None
level:对齐级别,默认为None
try_cast:布尔值,默认为False,尝试将结果投射回输入类型(如果可能)
raise_on_error:布尔值,默认为True,是否引发无效的数据类型(例如尝试在何处进行)
    字符串)

where方法其实是if-then语句的应用。对于每个DataFrame中的元素,如果cond条件为True,则使用元素;否则来自DataFrame的相应元素被other所取代。

官网上的例子,可以帮助我们理解where方法是如何处理数据的。
--------
>>> s = pd.Series(range(5))
>>> s.where(s> 0)
0 NaN
1 1.0
2 2.0
3 3.0
4 4.0
注释:我们可以看到上面的列子where只有一个cond参数,s是一个pandas的序列,0到4,而s>0这个条件得到的布尔值是0是假,其他都为真,所以显示的是NaN为假,而其他都是真,为原来的值

>>> df = pd.DataFrame(np.arange(10).reshape(-1,2),columns = ['A','B'])


        A	B
0	0	1
1	2	3
2	4	5
3	6	7
4	8	9
>>> m = df%3 == 0 #这里的条件被存储在变量m中,其实就是能被3整除的数字。
>>> df.where(m,-df)#这句话的意思是对df中的元素执行除以3取余,如果是0,就返回原值,其他的为假,被显示为NaN,而第二个参数-df是用来替代这些NaN值,意思就是把这些false值用原值的负值替代。
  A   B
0 0 -1
1 -2 3
2 -4 -5
3 6 -7
4 -8 9
-----------------------------------------------

在看下面这个列子,使用dataframe做为判断条件,if为true,显示df的原值,为false的用-1000替换。

In [8]: df
Out[8]: 
   AAA   BBB   CCC
0    4  2000  2000
1    5   555   555
2    6   555   555
3    7   555   555

In [9]: df_mask = pd.DataFrame({'AAA': [True] * 4,
   ...:                         'BBB': [False] * 4,
   ...:                         'CCC': [True, False] * 2})
   ...: 
In [9]df_mask
Out[9]
​        AAA	BBB	CCC
0	True	False	True
1	True	False	False
2	True	False	True
3	True	False	False

In [10]: df.where(df_mask, -1000)
Out[10]: 
   AAA   BBB   CCC
0    4 -1000  2000
1    5 -1000 -1000
2    6 -1000   555
3    7 -1000 -1000

发表评论

电子邮件地址不会被公开。 必填项已用*标注