使用pandas将Excel工作表(Listobject)读入python

使用pandas将Excel工作表(Listobject)读入python,python,excel,vba,pandas,listobject,Python,Excel,Vba,Pandas,Listobject,将excel数据读入python有多种方法。 Pandas还提供了一个用于编写和读取的API import pandas as pd from pandas import ExcelWriter from pandas import ExcelFile df = pd.read_excel('File.xlsx', sheetname='Sheet1') 那很好 但是:如何将每张工作表的表直接访问到数据框中 上图显示了一张表,其中包含一个与单元格(1,1)分隔的表格 此外,该工作表可能包含

将excel数据读入python有多种方法。 Pandas还提供了一个用于编写和读取的API

import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile

df = pd.read_excel('File.xlsx', sheetname='Sheet1')
那很好

但是:如何将每张工作表的表直接访问到数据框中

上图显示了一张表,其中包含一个与单元格(1,1)分隔的表格

此外,该工作表可能包含多个表(VBA中的listobjects)

我在任何地方都找不到把它们读成熊猫的方法

注1:不可能修改工作簿使所有表格朝向单元格(1,1)。 注2:我只想使用pandas(如果可能的话),并尽量减少导入其他库的需要。但如果没有其他方法,我准备使用其他的lybray。无论如何,我都无法使用xlwings

似乎可以解析excel文件,但没有为表提供解决方案,只为完整的工作表提供解决方案

政府似乎没有提供这种可能性


谢谢。

这里有一种解析一个表的方法,不管您需要知道解析表上的一些信息

df=pd.read\u excel(“file.xlsx”,usecols=“B:I”,index\u col=3) 打印(df) 不优雅,仅当工作表中有一张桌子时工作,但这是第一步:

将熊猫作为pd导入
导入字符串
字母=列表(string.ascii_大写)
df1=pd.read\u excel(“file.xlsx”)
def get_start_列(df):
对于i,枚举中的列(df.columns):
如果df[column]。第一个有效索引()
回信[i]
def get_last_列(df):
columns=df.columns
列=列(列)
对于i,枚举中的列(列):
如果df[column]。第一个有效索引()
回信[列名栏-i]
def get_第一行(df):
对于索引,df.iterrows()中的行:
如果不是row.isnull().values.all():
回报指数+1
def usecols(df):
开始=获取开始列(df)
结束=获取最后一列(df)
返回f“{start}:{end}”
df=pd.read\u excel(“file.xlsx”,usecols=usecols(df1),header=get\u first\u row(df1))
打印(df)

如果每个表的行为都相同,您可以使用跳过您的
pd.read\u excel(file,skiprows=n)
现在访问单个语句中的所有工作表
df=pd.concat(pd.read\u excel(file,sheet\u name=None,skiprows=n),忽略\u index=True)
或使用
pd.ExcelWriter(file)
当我回答@Florian时,我的想法是excel文件不是我的,我无法打开它并更改每张工作表的python代码。应该有办法。Listobject在excel中是一个功能强大的对象。以同样的方式,我通过id访问sheets collection,其想法是通过id访问每个工作表中的表列表集合。同样奇怪的是,在read_excel(文件,skiprows=n)中有skillrows而没有skipcols您必须编写一个自定义函数来迭代每个工作表或每个文件,以找到标题的起始位置,然后将这些参数传递到pandasAny工作区以跳过列?啊,Florian,太好了,我们在另一个问题中遇到过。谢谢假设您不知道Listobject在哪里。(实际上,我不想打开excel文件进行检查)。我想查看一下表(listobjects)。很好的一个,如果excel文件很小,我想这无关紧要,但我只会将前50行读入函数以提高性能