在python中alignment数据

我有Excel电子表格,我想连接成一个pandas数据框,但input到电子表格中的表格范围是不规则的。 input的数据可能开始于每个电子表格中的C5,D8,G4等。 下面的例子显示它从B5开始。

我不知道每个电子表格中的表格将从哪里开始,或者指定每个工作簿中的哪个表格,因为有几百个表格。 我打算将所有表单编译成一个数据框,然后提取我需要的数据行。 数据大部分是相同的格式,但我也需要记住电子表格中的任何注释。

如果每个电子表格中的数据alignment在一起,那么会更简单,然后我可以使用索引标签提取所需的行。 是否有办法将每个电子表格中的所有数据alignment,以便在每个电子表格的第一列中开始?

这是我到目前为止:

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_) 

这是一个openpyxl的解决scheme

不需要保存新文件或将数据预加载到内存中

 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)) 

您可以轻松修改代码,以限制在将行视为空白之前执行的最大步骤数

您可以尝试将表格转换为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(',')) 

这将至less删除空白行,并将所有内容与第一行和第一列alignment。

但请注意,在您的示例中,您将遇到包含“汇总,2017”的第2行的麻烦。

你确定所有的表格都有相同的格式(列标签,订单,数字吗?)

你可以使用这个function:

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html

 df = df.dropna(axis=0, how='all') df = df.dropna(axis=1, how='all') writer = pd.ExcelWriter('out.xlsx') df.to_excel(writer, 'out') writer.save() 

之前:

在这里输入图像说明

后:

在这里输入图像说明