我试图弄清楚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子句如何在单个数组上工作。
答案 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 。 。
参考:-