2017-09-19 4 views
0

헤더로 바꿀는 :분할 dataframe와 나는이 같은 한 장에 여러 테이블과 CSV 시트를

Name  Header-1  Header-8  Header 3 
Random Note 
Jack  X       X 
Jane     X 
NAN  NAN   NAN   NAN 
Name  Header 3  Header 2  Header 7 
Random note 
Jeremy X   X 
Joey        X 

나는 다음과 같은 결과를 하나 dataframe으로 그들을 바꿀 빈 행으로 테이블을 분할 할 수 :

Name  Header-1  Header-2  Header-3  ..... 
Jack  X 
Jane     X 
Jeremy        X 
Joey   X   X   X 

새로운 색인으로 빈 행을 사용하고 각 테이블을 새로운 df로 읽으 려합니다. 각 테이블의 헤더는 동일하며 모두 올바른 순서가 아닙니다. 결국 나는 그것들을 하나의 깨끗한 DF로 다시 묶어 넣고 싶습니다.

답변

0

는 다음과 같이 csv로 설정되어 있다고 가정하자 :

Name,Header-1,Header-2,Header-3 
Random,Note, , 
Jack,X,X, 
Jane,X, , 
,,, 
Name,Header-3,Header-2,Header-1 
Random,note, , 
Jeremy,X,X, 
Joey, , ,X 
당신은 자기 explanotary입니다 다음 코드로이 파일에서 작업 할 수 있습니다

:

import pandas as pd 
# Read csv file 
df = pd.read_csv("D:/tmp/data.csv", sep=',') 

#Find columns which are null, create partitions and group by them 
isnull = (df["Name"].isnull()) 
partitions = (isnull != isnull.shift()).cumsum() 
gb = df[~isnull].groupby(partitions) 
keys = gb.groups.keys() 

# Extract all the dataframes 
dfs = [gb.get_group(g) for g in keys] 

datas = [] 
# Set the header as first row for all dataframes that are not the first one 
for i,data in enumerate(dfs): 
    if i!=0: # First dataframe has already set the correct header 
     data.columns = data.ix[data.index[0]] 
     data = data.drop(data.index[0]) 
    datas.append(data) 

# Concatenate the dataframes and reset the index 
df_concat = pd.concat(datas) 
df_out = df_concat.reset_index(drop=True) 

# Change the order of the columns to get "Name" as first column 
cols = df_out.columns.tolist() 
cols = cols[-1:] + cols[:-1] 
df_out = df_out[cols] 

그래서 귀하의 의견은 다음과 같습니다

>>> df 
    Name Header-1 Header-2 Header-3 
0 Random  Note      
1 Jack   X   X   
2 Jane   X      
3  NaN  NaN  NaN  NaN 
4 Name Header-3 Header-2 Header-1 
5 Random  note      
6 Jeremy   X   X   
7 Joey        X 

이 예에서는 추출 할 두 번째 데이터 프레임에서 헤더의 순서가 다릅니다.

그리고 당신의 출력은 다음과 같습니다

>>> df_out 
    Name Header-1 Header-2 Header-3 
0 Random  Note     
1 Jack  X  X   
2 Jane  X     
3 Random      note 
4 Jeremy     X  X 
5 Joey  X     
+0

내가 6 라인 "이름"에서 KeyError를 받고 있어요 - 내가 – Che

+0

당신이 내가 보여준 예제를 시도해 봤어 ... 다른 열 이름을 바꾼? 오류가 발생하는 예제로 질문을 업데이트하십시오. –