[英]How to get Nan values for certain values in array
我正在生成一些隨機數,並且嘗試應用一個條件,如果值> 80,則將其設置為None,但是我無法獲得結果。 我的代碼如下
import pandas as pd
import numpy as np
from numpy import random
total = 200
rand_numbers = np.random.randint(0, 100, total)
corrupt_values = np.random.randint(0, 100, total) > 80
flag = False
if flag:
rand_numbers = [v for flag, v in zip(corrupt_values, rand_numbers)]
else:
rand_numbers = None
print 'rand_numbers: ', rand_numbers
我正在嘗試獲得類似的結果
rand_numbers [20, 50, Nan, Nan, 40, 10] so that values greater than 80 are replaced by Nan
我試圖在rand_numbers中生成200個隨機數,然后做出一個條件,即如果值超過80,則它將放置NaN而不是其他值。 我正在嘗試壓縮這兩個數組並使該條件起作用,但是我正在為此苦苦掙扎。 我是編碼新手。 任何幫助將不勝感激。
似乎您需要先強制轉換值才能float
(因為NaN
為float
),然后按條件更改值:
np.random.seed(100)
total = 100
rand_numbers = np.random.randint(0, 100, total)
corrupt_values = rand_numbers > 80
print (rand_numbers)
[ 8 24 67 87 79 48 10 94 52 98 53 66 98 14 34 24 15 60 58 16 9 93 86 2 27
4 31 1 13 83 4 91 59 67 7 49 47 65 61 14 55 71 80 2 94 19 98 63 53 27
56 30 48 47 39 38 44 18 64 56 34 53 74 17 72 13 30 17 53 68 50 91 91 83 53
78 0 13 57 76 3 70 3 84 79 10 87 60 3 48 52 43 36 5 71 38 86 94 98 42]
print (corrupt_values)
[False False False True False False False True False True False False
True False False False False False False False False True True False
False False False False False True False True False False False False
False False False False False False False False True False True False
False False False False False False False False False False False False
False False False False False False False False False False False True
True True False False False False False False False False False True
False False True False False False False False False False False False
True True True False]
rand_numbers = rand_numbers.astype(float)
rand_numbers[corrupt_values] = None
print (rand_numbers)
[ 8. 24. 67. nan 79. 48. 10. nan 52. nan 53. 66. nan 14. 34.
24. 15. 60. 58. 16. 9. nan nan 2. 27. 4. 31. 1. 13. nan
4. nan 59. 67. 7. 49. 47. 65. 61. 14. 55. 71. 80. 2. nan
19. nan 63. 53. 27. 56. 30. 48. 47. 39. 38. 44. 18. 64. 56.
34. 53. 74. 17. 72. 13. 30. 17. 53. 68. 50. nan nan nan 53.
78. 0. 13. 57. 76. 3. 70. 3. nan 79. 10. nan 60. 3. 48.
52. 43. 36. 5. 71. 38. nan nan nan 42.]
與numpy.where
類似的解決方案(來自已刪除的答案):
rand_numbers = rand_numbers.astype(float)
rand_numbers = np.where(corrupt_values, np.nan, rand_numbers)
print (rand_numbers)
[ 8. 24. 67. nan 79. 48. 10. nan 52. nan 53. 66. nan 14. 34.
24. 15. 60. 58. 16. 9. nan nan 2. 27. 4. 31. 1. 13. nan
4. nan 59. 67. 7. 49. 47. 65. 61. 14. 55. 71. 80. 2. nan
19. nan 63. 53. 27. 56. 30. 48. 47. 39. 38. 44. 18. 64. 56.
34. 53. 74. 17. 72. 13. 30. 17. 53. 68. 50. nan nan nan 53.
78. 0. 13. 57. 76. 3. 70. 3. nan 79. 10. nan 60. 3. 48.
52. 43. 36. 5. 71. 38. nan nan nan 42.]
您可以使用列表理解
import numpy as np
total = 200
rand_numbers = np.random.randint(0, 100, total)
result=[i if i<=80 else float('NaN') for i in rand_numbers]
那會給你:
>>> result
[64, 23, 12, 8, 70, nan, 13, 19, 73, 18, 78, 25, 77, 45, nan, 6, 15, nan, nan, 47, nan, 39, 5, 9, 22, 59, 57, 71, 8, 24, 76, 33, 66, nan, 21, 39, 48, 23, 40, nan, nan, 75, 68, 17, 52, nan, 71, 55, 10, 53, 51, 21, 35, 6, 67, 10, 34, nan, 24, 11, 42, 72, 74, 40, 63, 8, 57, 10, nan, 45, nan, 18, nan, 80, 6, 21, 22, 2, 51, 54, 80, 50, 63, 40, nan, 26, 43, 65, 7, 13, 54, 69, 12, nan, nan, 40, 44, nan, 78, 45, 55, 72, 6, 46, 43, 33, 24, 69, 77, 51, 52, 51, nan, 32, 22, 54, 53, 25, 61, 32, 8, nan, 75, 9, 22, nan, nan, 54, 32, 49, nan, 8, 59, 44, 14, 62, 61, 37, 60, 56, 12, 23, 50, 76, 5, 14, 46, nan, 58, 18, 53, 18, 39, 10, 1, 17, 36, 31, 42, 71, 61, 39, 27, 79, nan, 44, 76, nan, 26, 3, 26, 19, 64, 6, 41, 65, 76, 31, nan, 12, nan, 77, 8, 49, nan, nan, nan, 5, 40, 15, nan, 42, 14, 12, 75, 54, 47, 65, 9, 12]
編輯
也有可能:
import numpy as np
total = 200
rand_numbers = np.random.randint(0, 100, total)
corrupt_values = rand_numbers > 80
result=[i[0] if i[1]==False else float('nan') for i in zip(rand_numbers, corrupt_values)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.