在空白行上拆分 Pandas DataFrame

Leg*_*ack 2 python isnull dataframe pandas

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

这是 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
...
Run Code Online (Sandbox Code Playgroud)

如您所见,第 9 行是空白的。我需要做的是将第 0 行到第 8 行并将它们放入不同的数据帧中,并将第 10 行放入下一个空白处,以便我最终有几个数据帧。请注意,在查找空白行时,我需要整行都为空白。

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

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

当我在简化的 DF 上测试此代码时,此代码有效,但是,当然,我真正的 DataFrame 的列数比 ['A','B','C']

我怎样才能找到下一个空行(或者像我上面所做的那样,一次找到所有空行)而不必指定我的列名?

谢谢

cs9*_*s95 5

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 
Run Code Online (Sandbox Code Playgroud)

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