在空白行

时间:2017-11-16 00:07:17

标签: python pandas dataframe isnull

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

这是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']更多的列

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

由于

1 个答案:

答案 0 :(得分:2)

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可以很好地处理数据帧。