2017-08-16 122 views
0

我有Excel電子表格,我想連接成熊貓數據框,但輸入到電子表格中的表格範圍是不規則的。輸入的數據可能開始於每個電子表格中的C5,D8,G4等。下面的例子顯示它從B5開始。在python中對齊數據

我不知道表格在每個電子表格中的開始位置,或者指定每個工作簿中的哪個表格,因爲有幾百個表格。我打算將所有表單編譯成一個數據框,然後提取我需要的數據行。數據大部分採用相同的格式,但我也需要記住電子表格中的任何註釋。

如果每個電子表格中的數據對齊在一起,那麼會更簡單,然後我可以提取索引標籤所需的行。是否有辦法將每個電子表格中的所有數據對齊,以便在每個電子表格的第一列中開始?

這是我到目前爲止有:

import os 
import pandas as pd 
import glob 
import numpy as np 

path =r'dir' 
allFiles = glob.glob(path + "/*.xlsx") 
frame = pd.DataFrame() 
list_ = [] 
for file_ in allFiles: 
    df = pd.read_excel(file_,index_col=None, header=0) 
    list_.append(df) 
frame = pd.concat(list_) 

print(list_) 

回答

2

下面是與openpyxl

的解決方案無需新文件或預加載數據保存到內存中

import itertools 

from openpyxl import load_workbook 
from pandas import DataFrame 

def get_data(ws): 
    for row in ws.values: 
     row_it = iter(row) 
     for cell in row_it: 
      if cell is not None: 
       yield itertools.chain((cell,), row_it) 
       break 

def read_workbook(filename): 
    wb = load_workbook(filename) 
    ws = wb.active 
    return DataFrame(get_data(ws)) 

您可以輕鬆地修改代碼以限制的最大數量在考慮排空之前你需要採取的步驟

+0

這樣做的竅門,謝謝。 – Iwan

0

你可以嘗試錶轉換爲CSV和條帶化龍頭逗號。

with open("your_file_as_csv", 'r') as file_in, open("output_as_csv", 'w') as file_out: 
    for line in file_in: 
     file_out.write(line.strip(',')) 

這將至少刪除空白行並將所有內容與第一行和第一列對齊。

但請注意,在您的示例中,您將遇到包含「summary,2017」的第2行的麻煩。

你確定所有的表具有相同的格式(列的標籤,順序號?)