我有一个大型数据框,我需要在空行上拆分。
这是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']
更多的列
如何在不必指定列名的情况下找到下一个空白行(或者我上面所做的所有空行)?
由于
答案 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
可以很好地处理数据帧。