在空白行上拆分 Pandas DataFrame

Split Pandas DataFrame on Blank rows

我有一个大型数据框,需要在空行上拆分。

这是 DataFrame 的简化示例:

    A   B   C
0   1   0   International
1   1   1   International
2   NaN 2   International
3   1   3   International
4   1   4   International
5   8   0   North American
6   8   1   North American
7   8   2   North American
8   8   3   North American
9   NaN NaN NaN
10  1   0   Internal
11  1   1   Internal
12  6   0   East
13  6   1   East
14  6   2   East
...

如您所见,第 9 行是空白的。我需要做的是将第 0 行到第 8 行放入不同的数据帧,以及第 10 行到下一个空白,这样我最后就有了几个数据帧。请注意,在查找空白行时,我需要整行都为空白。

这是我用来查找空白的代码:

def find_breaks(df):
    df_breaks = df[(df.loc[:,['A','B','C']].isnull()).any(axis=1)]
    print(df_breaks.index)

当我在简化的 DF 上测试此代码时,它可以正常工作,但是,当然,我的真实 DataFrame 的列比 ['A','B','C']

多得多

如何在不指定列名的情况下找到下一个空白行(或者像我上面所做的那样,同时找到所有空白行)?

谢谢

IIUC,使用pd.isnull + np.split:

df_list = np.split(df, df[df.isnull().all(1)].index) 

for df in df_list:
    print(df, '\n') 

     A    B               C
0  1.0  0.0   International
1  1.0  1.0   International
2  NaN  2.0   International
3  1.0  3.0   International
4  1.0  4.0   International
5  8.0  0.0  North American
6  8.0  1.0  North American
7  8.0  2.0  North American
8  8.0  3.0  North American 

      A    B         C
9   NaN  NaN       NaN
10  1.0  0.0  Internal
11  1.0  1.0  Internal
12  6.0  0.0      East
13  6.0  1.0      East
14  6.0  2.0      East 

首先,获取整行为空的索引,然后使用它来将数据帧拆分为块。 np.split 可以很好地处理数据帧。