修剪 Python 数据框中的尾随 NaN 值

问题描述 投票:0回答:1

有没有办法修剪数据框中每列的尾随 NaN?

熟悉

dropna()
及其参数(例如,轴、方式)来处理此类问题,但似乎没有解决这种情况。

示例数据如下所示:

2023-02-10  NaN NaN NaN 0.00    0.00    NaN
2023-02-13  NaN NaN NaN 0.02    0.02    NaN
2023-02-14  NaN NaN NaN 0.00    0.00    NaN
2023-02-15  NaN NaN NaN 0.01    0.01    NaN
2023-02-16  NaN NaN NaN -0.01   -0.01   NaN
2023-02-17  NaN NaN NaN -0.01   -0.01   NaN
2023-02-21  NaN NaN NaN -0.03   -0.03   NaN
2023-02-22  NaN NaN NaN 0.00    0.00    NaN
2023-02-23  NaN NaN NaN 0.00    0.00    NaN
2023-02-24  NaN -0.02   NaN -0.02   -0.02   NaN
2023-02-27  NaN 0.01    NaN 0.01    0.01    NaN
2023-02-28  NaN 0.03    0.03    0.00    0.00    NaN
2023-03-01  NaN -0.04   -0.04   -0.01   -0.01   NaN
2023-03-02  NaN 0.00    0.00    0.00    0.00    NaN
2023-03-03  NaN -0.01   -0.01   0.04    0.04    NaN
2023-03-06  NaN -0.02   -0.02   0.02    0.02    NaN
2023-03-07  -0.01   -0.01   -0.01   -0.01   -0.01   NaN
2023-03-08  -0.01   -0.01   -0.01   NaN 0.01    NaN
2023-03-09  0.00    -0.02   -0.02   NaN -0.01   NaN
2023-03-10  -0.03   -0.01   -0.01   NaN -0.01   NaN
2023-03-13  0.02    -0.03   -0.03   NaN 0.01    NaN
2023-03-14  -0.02   -0.02   -0.02   NaN 0.01    NaN
2023-03-15  -0.04   0.00    0.00    NaN 0.00    NaN
2023-03-16  -0.03   0.00    0.00    NaN 0.02    NaN
2023-03-17  0.01    -0.02   -0.02   NaN -0.01   -0.01
2023-03-20  -0.01   -0.01   -0.01   NaN 0.02    0.02
2023-03-21  0.03    0.01    0.01    NaN 0.01    0.01
2023-03-22  0.03    -0.05   -0.05   NaN -0.01   -0.01
2023-03-23  -0.01   -0.02   -0.02   NaN 0.01    0.01
2023-03-24  0.01    0.00    0.00    NaN 0.01    0.01

我想要一个如下所示的结果:

2023-02-10  NaN NaN NaN NaN 0.00    NaN
2023-02-13  NaN NaN NaN NaN 0.02    NaN
2023-02-14  NaN NaN NaN NaN 0.00    NaN
2023-02-15  NaN NaN NaN NaN 0.01    NaN
2023-02-16  NaN NaN NaN NaN -0.01   NaN
2023-02-17  NaN NaN NaN NaN -0.01   NaN
2023-02-21  NaN NaN NaN NaN -0.03   NaN
2023-02-22  NaN NaN NaN NaN 0.00    NaN
2023-02-23  NaN NaN NaN NaN 0.00    NaN
2023-02-24  NaN -0.02   NaN NaN -0.02   NaN
2023-02-27  NaN 0.01    NaN NaN 0.01    NaN
2023-02-28  NaN 0.03    0.03    NaN 0.00    NaN
2023-03-01  NaN -0.04   -0.04   NaN -0.01   NaN
2023-03-02  NaN 0.00    0.00    0.00    0.00    NaN
2023-03-03  NaN -0.01   -0.01   0.02    0.04    NaN
2023-03-06  NaN -0.02   -0.02   0.00    0.02    NaN
2023-03-07  -0.01   -0.01   -0.01   0.01    -0.01   NaN
2023-03-08  -0.01   -0.01   -0.01   -0.01   0.01    NaN
2023-03-09  0.00    -0.02   -0.02   -0.01   -0.01   NaN
2023-03-10  -0.03   -0.01   -0.01   -0.03   -0.01   NaN
2023-03-13  0.02    -0.03   -0.03   0.00    0.01    NaN
2023-03-14  -0.02   -0.02   -0.02   0.00    0.01    NaN
2023-03-15  -0.04   0.00    0.00    -0.02   0.00    NaN
2023-03-16  -0.03   0.00    0.00    0.01    0.02    NaN
2023-03-17  0.01    -0.02   -0.02   0.00    -0.01   -0.01
2023-03-20  -0.01   -0.01   -0.01   -0.01   0.02    0.02
2023-03-21  0.03    0.01    0.01    0.00    0.01    0.01
2023-03-22  0.03    -0.05   -0.05   0.04    -0.01   -0.01
2023-03-23  -0.01   -0.02   -0.02   0.02    0.01    0.01
2023-03-24  0.01    0.00    0.00    -0.01   0.01    0.01
python pandas dataframe
1个回答
0
投票

IIUC,您想要删除尾随的 NaN 并将系列“推”到底部,忽略索引。

dropna
将无法实现这一目标。

您应该使用自定义函数:

def trim_last_nan(s):
    # identify rows that are not trailing NaNs
    m = s[::-1].notna().cummax()[::-1]
    # select them, reindex
    return s[m].set_axis(s.index[-m.sum():])

out = df.apply(trim_last_nan)

输出:

               1     2     3     4     5     6
2023-02-10   NaN   NaN   NaN   NaN  0.00   NaN
2023-02-13   NaN   NaN   NaN   NaN  0.02   NaN
2023-02-14   NaN   NaN   NaN   NaN  0.00   NaN
2023-02-15   NaN   NaN   NaN   NaN  0.01   NaN
2023-02-16   NaN   NaN   NaN   NaN -0.01   NaN
2023-02-17   NaN   NaN   NaN   NaN -0.01   NaN
2023-02-21   NaN   NaN   NaN   NaN -0.03   NaN
2023-02-22   NaN   NaN   NaN   NaN  0.00   NaN
2023-02-23   NaN   NaN   NaN   NaN  0.00   NaN
2023-02-24   NaN -0.02   NaN   NaN -0.02   NaN
2023-02-27   NaN  0.01   NaN   NaN  0.01   NaN
2023-02-28   NaN  0.03  0.03   NaN  0.00   NaN
2023-03-01   NaN -0.04 -0.04   NaN -0.01   NaN
2023-03-02   NaN  0.00  0.00  0.00  0.00   NaN
2023-03-03   NaN -0.01 -0.01  0.02  0.04   NaN
2023-03-06   NaN -0.02 -0.02  0.00  0.02   NaN
2023-03-07 -0.01 -0.01 -0.01  0.01 -0.01   NaN
2023-03-08 -0.01 -0.01 -0.01 -0.01  0.01   NaN
2023-03-09  0.00 -0.02 -0.02 -0.01 -0.01   NaN
2023-03-10 -0.03 -0.01 -0.01 -0.03 -0.01   NaN
2023-03-13  0.02 -0.03 -0.03  0.00  0.01   NaN
2023-03-14 -0.02 -0.02 -0.02  0.00  0.01   NaN
2023-03-15 -0.04  0.00  0.00 -0.02  0.00   NaN
2023-03-16 -0.03  0.00  0.00  0.01  0.02   NaN
2023-03-17  0.01 -0.02 -0.02  0.00 -0.01 -0.01
2023-03-20 -0.01 -0.01 -0.01 -0.01  0.02  0.02
2023-03-21  0.03  0.01  0.01  0.00  0.01  0.01
2023-03-22  0.03 -0.05 -0.05  0.04 -0.01 -0.01
2023-03-23 -0.01 -0.02 -0.02  0.02  0.01  0.01
2023-03-24  0.01  0.00  0.00 -0.01  0.01  0.01
© www.soinside.com 2019 - 2024. All rights reserved.