![](/img/trans.png)
[英]Replace nan's for a list according to another list with different sizes python
[英]How to replace elements in a or more list to nan by list nan's position in python3?
a = [1,2,3,np.nan,4,6,8,np.nan,5,3,7]
b = [np.nan,2,3,5,7,np.nan,6,2,6,9]
for i in np.arange(0,12,1):
if a[i] == np.nan or b[i]==np.nan:
a[i] = np.nan
b[i] =np.nan
我是 python 的新手,我想要最終結果:
a = [np.nan, 2,3,np.nan, 4, 6, np.nan, np.nan,5,3,7]
b = [np.nan,2,3,np.nan,7,np.nan,np.nan,2,6,9]
但它沒有用。 非常感謝您的任何建議
您正在使用 numpy,那么為什么不使用 numpy arrays?
a, b = map(np.array, [a, b])
l = min(a.size, b.size)
# Get a mask of NaN cells
m = np.isnan(a[:l]) | np.isnan(b[:l])
# Set to NaN based on the mask
a[:l][m] = np.nan
b[:l][m] = np.nan
a
# array([nan, 2., 3., nan, 4., nan, 8., nan, 5., 3., 7.])
b
# array([nan, 2., 3., nan, 7., nan, 6., nan, 6., 9.])
我知道這與 OP 的“預期輸出”不同,但根據他們的解釋,我認為他們的 output 中有一個錯誤。
if len(a) > len(b):
for i, element in enumerate(b):
if np.isnan(element) or np.isnan(a[i]):
a[i] = np.nan
b[i] = np.nan
else:
for i, element in enumerate(a):
if np.isnan(element) or np.isnan(b[i]):
a[i] = np.nan
b[i] = np.nan
這是一個解決方案:
for i in range(min(len(a), len(b))):
if np.isnan(a[i]) or np.isnan(b[i]):
a[i] = np.NaN
b[i] = np.NaN
print(a)
# [nan, 2, 3, nan, 4, nan, 8, nan, 5, 3, 7]
print(b)
# [nan, 2, 3, nan, 7, nan, 6, nan, 6, 9]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.