2017-11-16 10 views
0

빈 행으로 분할해야하는 큰 데이터 프레임이 있습니다.빈 행의 팬더 분할 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 비어 :

여기 DataFrame의 간단한 예입니다. 내가해야 할 일은 0에서 8까지의 행을 가져 와서 다른 데이터 프레임에 놓을뿐 아니라 행 10을 다음 빈 공간에 넣는 것입니다. 결국 여러 데이터 프레임이 있습니다. 빈 행을 찾을 때 전체 행이 비어 있어야합니다. ['A','B','C']

보다

나는 물론, 단순화 된 DF에서 테스트하지만 때이 코드가 작동
def find_breaks(df): 
    df_breaks = df[(df.loc[:,['A','B','C']].isnull()).any(axis=1)] 
    print(df_breaks.index) 

, 내 진짜 DataFrame이 가지고 더 많은 열 : 여기

내가 공백을 찾기 위해 사용하고 코드입니다

열 이름을 지정하지 않고도 다음 빈 행을 찾거나 (위에서 한 것처럼 모든 빈 행을 한 번에 찾을 수 있음) 어떻게 할 수 있습니까?

감사

답변

1

IIUC는 + np.splitpd.isnull를 사용

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 

첫째, 덩어리로 dataframe를 분할하는 것을 사용 후 행 전체가 null의 인덱스를 취득합니다. np.split은 데이터 프레임을 매우 잘 처리합니다.

+0

내 코드보다 훨씬 덜 복잡한 코드입니다. 감사합니다. –

+1

@LegitStack 플러스, 당신의 코드는 _any _...를 필요로하는 동안 _all_ (그들은 하나 또는 둘 모두가 아닌 모두 참임을 보장합니다). –