首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Pandas连接excel工作表

使用Pandas连接excel工作表
EN

Stack Overflow用户
提问于 2022-09-16 18:58:24
回答 2查看 88关注 0票数 0

我第一次用熊猫。我确信答案是类似于将工作表名称存储在列表中,然后根据我正在寻找的名称遍历列表。我只是没有足够的经验知道怎么做。

其目标是使用熊猫从用户选择的工作簿中提取和连接多个工作表中的数据。最后的输出是包含从各个工作表中提取的所有数据的单个工作表excel。

excel工作簿由大约100个工作表组成。可见工作表的数量总是不同的,在“主框架BUP1”之前出现的工作表数量也是可变的。

目前,我有部分代码检查页面可见性工作。当工作表在工作簿中的位置可能会发生变化时,我似乎无法弄清楚如何从特定的工作表开始(即不总是从0开始的第三个工作表,在用户excel中可能是第5个)。然而,数据应该开始从表格中提取。我发现的所有东西都是指定要阅读的特定工作表的示例。

如有任何帮助/指导,将不胜感激。

代码语言:javascript
复制
# user selected file from GUI
xl = values["-xl_file-"]
loc = os.path.dirname(xl)

xls = pd.ExcelFile(xl)
sheets = xls.book.worksheets

for x in sheets:
    print(x.title, x.sheet_state)
    if x.sheet_state == 'visible':
        df = pd.concat(pd.read_excel(xls, sheet_name=None, header=None,
             skiprows=5, nrows=32, usecols='M:AD'), ignore_index=True)
writer = pd.ExcelWriter(f'{loc}/test.xlsx')
df.to_excel(writer, 'bananas')
writer.save()

*对最终目标的进一步澄清:排除所有发生在“主框架BUP 1”之前的工作表,只考虑可见的表,从‘M6:add 37’中提取数据,如果整行为空白,请停止从数据帧中添加(或至少删除)数据,停止在工作表名称与“面板”部分匹配的工作表之前对工作表进行数据提取。

如果我创建了一个可见工作表字典,那么如何创建一个新的字典,使用该字典只包含“主框架BUP 1”到在“面板”部分匹配之前发生的任何工作表?然后我就可以用那本字典来提取数据了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-17 19:53:10

我自己创造了一个最小的样本,并为你解决了这个问题。

代码语言:javascript
复制
xls = pd.ExcelFile('data/Test.xlsx')
sheets = xls.book.worksheets
sList = [x.title for x in sheets if x.sheet_state == 'visible']
        
dfs = [pd.read_excel('data/Test.xlsx', sheet_name=s, skiprows=5, nrows=32, usecols='M:AD') for s in sList]
dfconcat = pd.concat(dfs)

现在,您需要调整列、标题等,就像您在问题中所做的那样。我希望这件事对你有用。从我这边看,它就像一种魅力。

票数 2
EN

Stack Overflow用户

发布于 2022-09-16 20:32:56

如果没有实际了解您的数据发生了什么,这是有点困难的。我认为您所缺少的是您需要先创建一个数据帧,然后再连接其他数据。此外,你需要通过一张纸(X),以使熊猫能够阅读,否则它将成为一本字典。如果它不起作用,获取第一个工作表并创建一个df,然后连接。

代码语言:javascript
复制
# user selected file from GUI
xl = values["-xl_file-"]
loc = os.path.dirname(xl)


xls = pd.ExcelFile(xl)
sheets = xls.book.worksheets


df = pd.DataFrame()
for x in sheets:
    print(x.title, x.sheet_state)
    if x.sheet_state == 'visible':
        df = pd.concat(pd.read_excel(xls, sheet_name=x, header=None,
             skiprows=5, nrows=32, usecols='M:AD'), ignore_index=True)
writer = pd.ExcelWriter(f'{loc}/test.xlsx')
df.to_excel(writer, 'bananas')
writer.save()

您也可以将所有的dfs放在字典中,同样,如果不知道您在使用什么,也是很困难的。

代码语言:javascript
复制
xl = pd.ExcelFile('yourFile.xlsx')

#collect all sheet names
sheets = xl.sheet_names

#build dictionaries from all sheets passing None to sheet_name
diDF = pd.read_excel('yourFile.xlsx', sheet_name=None)

di = {k : diDF[k] for k in diDF if k in sheets}


for x in sheets:
    if x.sheet_state == 'visible':
        dfs = {x: pd.DataFrame(di[x])}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73749263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档