2016-05-26 10 views
1

Ich habe ein Problem beim Lesen einiger schlecht strukturierte Excel-Vorlagen.Pandas - Absoluter Wert für Kopfzeile

Ich beabsichtige, für meinen Prozess eine Metadatendatei zu verwenden, die 4 Felder enthält: Dateiname, Typ, Blatt-ID und Kopfzeile.

Mein Prozess diese Metadaten dann lesen Sie es auf die wie so pd.read_excel Funktion übergeben:

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

Allerdings ist pandas nicht den absoluten Wert von header_row nehmen, sondern (ich vermute) versucht, alle leer zu entfernen Zeilen vor dem, was es als Header betrachtet - Dies bedeutet, dass der Datenrahmen um einen ungewöhnlichen Betrag versetzt wird, der von Vorlage zu Vorlage variiert.

Wie bekomme ich Pandas, um den Datenrahmen mit dem absoluten Wert der Kopfzeile zu starten, die ich in die pd.read_excel Funktion übergebe?

Beispielcode:

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 

dies weiter zu markieren, wenn ich zu entfernen:

... header=header_row, skiprows=header_row) 

ich die folgende Ausgabe:

    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 

Beachten Sie, dass Header als Zeile angezeigt werden 4, ist es tatsächlich Zeile 7 auf dem Blatt.

Jede Hilfe wird geschätzt!

Antwort

0

Wenn ich richtig verstehe, sieht die Excel-Tabelle wie:

enter image description here

Wenn ich es gerne lesen:

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

ich folgendes:

enter image description here

Wenn ich es lese:

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

ich es richtig bekommen (glaube ich):

enter image description here

Also, vielleicht ist es eine Frage der Kombination von Kopf und skiprows?

+0

Denken Sie, dass Sie Recht haben: Es scheint, dass es einen Konflikt von "Header" und "skiprows" gab. Zusammengefügte Zellen vor dem Header verursachten außerdem seltsame Ausgaben. Sortiert jetzt, danke für die obigen Bemühungen! –