带单个数组和/或Empty_like的numpy的Where子句

时间:2019-03-13 12:43:45

标签: python pandas numpy

我试图弄清楚np.where子句如何工作。我创建一个简单的df:

np.random.seed(1)
df = pd.DataFrame(np.random.randint(0, 10, size=(3, 4)), columns=list('ABCD'))
print(df)

   A  B  C  D
0  5  8  9  5
1  0  0  1  7
2  6  9  2  4

现在当我实现时:

print(np.where(df.values, 1, np.nan))

我收到:

[[  1.   1.   1.   1.]
 [ nan  nan   1.   1.]
 [  1.   1.   1.   1.]]

但是当我从df创建一个empty_like数组并将其放入where子句时,我会收到以下消息:

print(np.where(np.empty_like(df.values), 1, np.nan))

[[ 1.  1.  1.  1.]
 [ 1.  1.  1.  1.]
 [ 1.  1.  1.  1.]]

确实可以使用帮助来解释where子句如何在单个数组上工作。

1 个答案:

答案 0 :(得分:1)

np.empty_like()

文档:-

numpy.empty_like(原型,dtype = None,order ='K',subok = True)

返回形状和类型与给定数组相同的新数组。

>>> a = ([1,2,3], [4,5,6])                         # a is array-like
>>> np.empty_like(a)
array([[-1073741821, -1073741821,           3],    #random
       [          0,           0, -1073741821]])

np.empty_like()创建形状和类型相同的数组作为给定数组,但具有随机数。该数组现在进入np.where()

numpy.where()

文档:-

numpy.where(condition [,x,y])

根据条件返回从x或y中选择的元素。

示例:-

>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.where(a < 5, a, 10*a)
array([ 0,  1,  2,  3,  4, 50, 60, 70, 80, 90])
>>>np.where(a,1,np.nan)
array([nan,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])

在Python中,除零以外的任何其他数字均被视为 TRUE ,而对于零分 FALSE 则被视为零。

np.where()获得一个np.array时,它将检查条件,这里数组本身充当条件,即np.where的值为 TRUE 如果数组元素不为零,则为 FALSE ;当数组元素为非零时,则为 FALSE 。 。

参考:-

  1. numpy.where()
  2. numpy.empty_like()