在不是 NA 的最后一行之后删除所有具有所有 NA 值的行

Bor*_*lis 5 python dataframe pandas

          0     1     2     3        4  
0        2.0  None  None  None  21041.0  
1        1.0  None  None  None   3003.0  
2        2.0  None  None  None   1210.0  
3        NaN  None  None  None      NaN  
4        2    None  None  None      NaN 
5        NaN  None  None  None      NaN
6        NaN  None  None  None      NaN  
Run Code Online (Sandbox Code Playgroud)

所以我会删除 5 和 6 但保留 3,即使所有值都是 NaN。

我知道:

df.dropna(axis = 0, how = 'all', inplace = True)
Run Code Online (Sandbox Code Playgroud)

这也会删除 3。我想我需要结合其他一些操作。

Ioa*_*mas 2

您可以获得至少有一个非 NaN 值的最后一行的索引,然后对数据集进行切片直到该点:

df=df.replace('None', np.nan)
ids = df[df.notnull().any(axis=1)].index
last_id = ids[-1]

res = df.loc[:last_id, :]

print(res)
Run Code Online (Sandbox Code Playgroud)

输出:

     0   1   2   3        4
0  2.0 NaN NaN NaN  21041.0
1  1.0 NaN NaN NaN   3003.0
2  2.0 NaN NaN NaN   1210.0
3  NaN NaN NaN NaN      NaN
4  2.0 NaN NaN NaN      NaN
Run Code Online (Sandbox Code Playgroud)