如果所有行都是 nan,则将 pandas 数据帧拆分为多个数据帧

Abh*_*rni 0 python dataframe pandas

我有以下数据框。

       a          b           c          d
0   4.65  30.572857  133.899994  23.705000
1   4.77  30.625713  134.690002  23.225000
2   4.73  30.138571  132.250000  23.040001
3   5.07  30.082857  130.000000  23.290001
4   4.98  30.282858  133.520004  23.389999
5    NaN        NaN         NaN        NaN
6   4.82  29.674286  127.349998  23.700001
7   4.83  30.092857  129.110001  24.254999
8   4.85  29.918571  127.349998  24.695000
9   4.70  29.418571  127.139999  24.424999
10  4.69  30.719999  127.610001  25.200001
11   NaN        NaN         NaN        NaN
12  4.43  29.724285  126.620003  24.764999
13   NaN        NaN         NaN        NaN
14  4.29  29.010000  120.309998  24.730000
15  4.11  29.420000  119.480003  25.035000
Run Code Online (Sandbox Code Playgroud)

当存在全 NaN 的行时,我想将此 df 拆分为多个 df。

我浏览了以下链接,但无法弄清楚如何将其应用于我的问题。

如果 pandas 数据框超过 10 行,则将其分成两部分

将数据帧拆分为多个数据帧

在我的示例中,我将有 4 个数据帧,其中输出为 5、5、1 和 2 行。请提出前进的方向。

Erf*_*fan 5

使用isna、all、cumsum和groupby。

首先我们检查一行中的所有值是否都是NaN,然后使用 cumsum 创建一个组指示器,最后我们使用 groupby 将这些数据帧保存在列表中:

grps = df.isna().all(axis=1).cumsum()
dfs = [df.dropna() for _, df in df.groupby(grps)]
Run Code Online (Sandbox Code Playgroud)
for df in dfs:
    print(df)

      a          b           c          d
0  4.65  30.572857  133.899994  23.705000
1  4.77  30.625713  134.690002  23.225000
2  4.73  30.138571  132.250000  23.040001
3  5.07  30.082857  130.000000  23.290001
4  4.98  30.282858  133.520004  23.389999
       a          b           c          d
6   4.82  29.674286  127.349998  23.700001
7   4.83  30.092857  129.110001  24.254999
8   4.85  29.918571  127.349998  24.695000
9   4.70  29.418571  127.139999  24.424999
10  4.69  30.719999  127.610001  25.200001
       a          b           c          d
12  4.43  29.724285  126.620003  24.764999
       a      b           c       d
14  4.29  29.01  120.309998  24.730
15  4.11  29.42  119.480003  25.035
Run Code Online (Sandbox Code Playgroud)