2016-05-26 31 views
1

我在閱讀一些結構不良的excel模板時遇到了問題。熊貓 - 標題行的絕對值

我打算使用包含4個字段的元數據文件:文件名,類型,工作表ID和標題行。

我的過程中會讀取這些元數據,然後將它傳遞給pd.read_excel功能,像這樣:

pd.read_excel(filename, sheetname=sheet_id, header=header_row, skiprows=header_row) 

然而,pandas不會header_row取絕對值,而是(我猜)試圖移除所有空白在它認爲是標題之前的行 - 這意味着數據框的偏移量會因模板而異。

如何讓大熊貓開始數據幀,並將其傳入pd.read_excel函數的標頭的絕對值?

示例代碼:

import pandas as pd 
from os.path import join, dirname, abspath 

def read_worksheet(filename, sheet_id, header_row): 
    df = pd.read_excel(filename, sheetname=sheet_id, header=header_row,skiprows=header_row) 
    return df 



if __name__=='__main__': 

    meta_filename='document_meta_new.xlsx' 
    output_filename='output.xls' 

    meta_df = read_worksheet(meta_filename,0,0) 

    master_dict={} 

    for row in range(len(meta_df)): 
     filename = meta_df['Filename'][row] 
     sheet = int(meta_df['Sheet ID (zero indexed)'][row]) 
     type = meta_df['Type'][row] 
     header = meta_df['Header row'][row] 

     filepath = join(dirname(dirname(abspath(__file__))),'etlf_pattern','input_docs', filename) 

     df = read_worksheet(filepath, sheet, header) 
     # key = str(filename) + '||' + str(type) 
     key = str(filename) + '||' + str(sheet) 
     master_dict[key] = df 


    print master_dict 

對此進一步強調,如果刪除:

... header=header_row, skiprows=header_row) 

我得到以下輸出:

    Unnamed: 13    Unnamed: 14 
0       NaN      NaN 
1       NaN      NaN 
2       NaN      NaN 
3       NaN      NaN 
4 Standard DD Attribute Name    Column Name 
5      PRTY_ID    CUSTOMER_ID 
6    INDV_NM_PRFX_TXT   CUSTOMER_TITLE 

注意,標題顯示爲行4,其實際上排在第7行。

任何幫助表示讚賞!

回答

0

如果我理解正確的話,Excel表格的樣子:

enter image description here

如果我的理解是這樣的:

df = pd.read_excel('tab.xlsx', sheetname='Sheet1') 

我得到如下:

enter image description here

如果我讀它像:

df = pd.read_excel('tab.xlsx', sheetname='Sheet1', header=7) 

我正確地得到它(我認爲):

enter image description here

所以,也許這是skiprows的結合的問題?

+0

認爲你是對的:看起來有'header'和'skiprows'的衝突。同樣,標題之前的合併單元格導致了奇怪的輸出。現在排序,感謝上面的努力! –