简体   繁体   English

Python数组中将零值转换为nan值

[英]zero values to nan values in an array of Python

I have an array with some zero values that i wish to convert in nan values. 我有一个带有一些零值的数组,希望将其转换为nan值。 When i apply the code 当我应用代码
all values become nan 所有的价值观都变得难缠

myarray
array([[ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       ..., 
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.]])

myarray.shape
(64L, 52L)
myarray.max()
4563.666015625
myarray.min()
0.0

i wish to convert zero values in nan. 我希望在nan中转换零值。 I use an example from stackoverflow 我使用来自stackoverflow的示例

a = np.arange(3.0)
a
array([ 0.,  1.,  2.])
a[a==0] = np.nan
a
array([ nan,   1.,   2.])

when i apply the example to my array all values became nan 当我将示例应用于数组时,所有值都变为nan

myarray[myarray == 0.] = nan
myarray
array([[ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       ..., 
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan]])

myarray.max()
nan
myarray.min()
nan

It's not that all the values become nan , it's that (1) you're only looking at the parts that do, and (2) min and max don't work well with nan s. 并不是所有的值都变成nan ,而是(1)您仅查看起作用的部分,以及(2) minmax不适用于nan s。

For example, if we make an array resembling yours: 例如,如果我们制作一个类似于您的数组:

>>> myarray = np.zeros((64, 52))
>>> myarray[3:-3,3:-3] = np.random.uniform(0, 5000, (64-6,52-6))
>>> myarray
array([[ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       ..., 
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.]])
>>> myarray[myarray==0] = np.nan
>>> myarray
array([[ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       ..., 
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan]])

It may look like it's all nan , but it's not: 看起来好像全是nan ,但事实并非如此:

>>> myarray[2:5, 2:5]
array([[           nan,            nan,            nan],
       [           nan,  1500.05326562,  4583.70521213],
       [           nan,  4896.62420284,   892.83210033]])

You can also use nanmin and nanmax , which ignore nan s: 您还可以使用nanminnanmax ,它们忽略nan s:

>>> myarray.min()
nan
>>> myarray.max()
nan
>>> np.nanmin(myarray)
0.60474162939361253
>>> np.nanmax(myarray)
4996.8967777356092

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM