如何通过跳过NaN从数组/数据帧获取第一个和最后一个数字对

2024-04-25 21:10:17 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个列表或数据帧(速度问题):

data = 

array([[45,  7, 43,6,nan, nan],
       [44,  6, 42,5,nan,nan],
       [nan, nan, nan, nan,nan,nan],
       [41,  5, 48,23,21,34],
       [46,  4, 47,22,nan,nan],
       [nan, nan, nan,nan,nan,nan]])

对于每一行,我想通过跳过NaN的来获取第一个和最后一个2数字并存储它们。你知道吗

期望输出:

final_data = ([45,7, 35,6],
              [first 2 number, last 2 numbers]
              [first 2 number, last 2 numbers]
              [first 2 number, last 2 numbers]
              [first 2 number, last 2 numbers])

Tags: 数据number列表data数字nanarray速度
1条回答
网友
1楼 · 发布于 2024-04-25 21:10:17

如果您使用的是numpy,那么可以利用logical not operatornp.isnan()。你知道吗

下面是一个简单的例子:

>>> x = np.array([[1,2,3,4,5],[1,2,3,np.nan,np.nan]])
>>> for a in x:
...     r = a[~np.isnan(a)]
...     print(r[:2],r[-2:])
...
[1. 2.] [4. 5.]
[1. 2.] [2. 3.]

使用您的数据:

>>> x
array([[45.,  7., 43.,  6., nan, nan],
       [44.,  6., 42.,  5., nan, nan],
       [nan, nan, nan, nan, nan, nan],
       [41.,  5., 48., 23., 21., 34.],
       [46.,  4., 47., 22., nan, nan],
       [nan, nan, nan, nan, nan, nan]])

那么

final_data = [] 

for a in x:   
    r = a[~np.isnan(a)] 
    if len(r): #skip empty arrays
        res = (r[:2],r[-2:])
    final_data.append(res)

pd.DataFrame(final_data)

    [45.  7.] [43.  6.]
    [44.  6.] [42.  5.]
    [41.  5.] [21. 34.]
    [46.  4.] [47. 22.]

相关问题 更多 >

    热门问题