2016-05-26 6 views
1

У меня проблема с чтением некоторых плохо структурированных шаблонов excel.Pandas - Абсолютное значение для строки заголовка

Я намерен для моего процесса использовать файл метаданных, содержащий 4 поля: имя файла, тип, идентификатор листа и строку заголовка.

Мой процесс будет читать эти метаданные затем передать его в функцию pd.read_excel следующим образом:

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

Однако pandas не принимает абсолютное значение из header_row, но вместо этого (я угадываю) пытается удалить все заготовки строки до того, что он считает заголовком. Это означает, что фреймворк данных компенсируется необычной суммой, которая варьируется от шаблона к шаблону.

Как получить pandas, чтобы запустить dataframe с абсолютным значением заголовка, который я передаю в функцию 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». Кроме того, объединенные ячейки перед заголовком вызывали странные выходы. Отсортировано сейчас, спасибо за усилия выше! –

 Смежные вопросы

  • Нет связанных вопросов^_^