Python 迭代excel的不同选项卡,提取数据并放入数据框

Python 迭代excel的不同选项卡,提取数据并放入数据框,python,pandas,numpy,openpyxl,Python,Pandas,Numpy,Openpyxl,我有一个excel工作簿df,它包含两个选项卡,Sheet1和Sheet2。我想从这两个选项卡中提取值,并使用openpyxl/Pandas创建一个新的数据框 表1 2021 2021 q1 q2 ID 1 1 ID2 3 3 name A A 第2张 2021 2021 q1 q2 ID 2 2 ID2 2 2 name B

我有一个excel工作簿df,它包含两个选项卡,Sheet1Sheet2。我想从这两个选项卡中提取值,并使用openpyxl/Pandas创建一个新的数据框

表1

      2021    2021
      q1      q2
ID    1       1
ID2   3       3
name  A       A
第2张

  2021    2021
      q1      q2
ID    2       2
ID2   2       2
name  B       B

所需的

quarter year ID   ID2   name

q1     2021  1    3     A
q1     2021  2    2     B

#Load openpyxl

import openpyxl

wb = openpyxl.load_workbook("df.xlsx")
ws1 = wb.worksheets[0]
ws2 = wb.worksheets[1]


#create loop that will iterate over the first row and end at 2nd column for each sheet

for row in ws1.iter_rows(min_row = 0, max_col = 1, max_row = 3, min_col = 0 
                            for cell in row:
                                 print(cell.value, end="")
                            print()


for row in ws2.iter_rows(min_row = 0, max_col = 1,  max_row = 3, min_col = 0 
                            for cell in row:
                                 print(cell.value, end="")
                            print()

从收集的值创建新数据框时遇到问题。欢迎提出任何建议或意见。我仍在对此进行故障排除。

pd.read\u excel可以读取特定的工作表或多个工作表,如下所示:

import pandas as pd
dict_dfs = pd.read_excel("df.xlsx", sheet_name=[0,1])

df = pd.concat(dict_dfs)
之后,如果excel文件的格式已经允许,您可以迭代数据帧字典或直接组合它们

例如,加载样本数据后:

import pandas as pd
df1 = pd.DataFrame({'2021': {'_': 'q1', 'ID': '2', 'ID2': '2', 'name': 'B'},
 '2021.1': {'_': 'q2', 'ID': '2', 'ID2': '2', 'name': 'B'}})
df2 = pd.DataFrame({'2021': {'_': 'q1', 'ID': '1', 'ID2': '3', 'name': 'A'},
 '2021.1': {'_': 'q2', 'ID': '1', 'ID2': '3', 'name': 'A'}})


df = pd.concat([df1.T,df2.T])
df.index = df.index.str.split(".").str[0]
print(df)
#        _ ID ID2 name
# 2021  q1  2   2    B
# 2021  q2  2   2    B
# 2021  q1  1   3    A
# 2021  q2  1   3    A

.T
为您提供了转置的数据帧。

为什么不直接使用?好的,当然,我想使用openpyxl从单元格中获取数据,然后创建一个新的数据帧会更容易。谢谢我会查这个的。好的,谢谢。这是否意味着:df本质上将保存从表0和表1中提取的任何值?@Lynn只要数据以典型的表格式存储,它就应该这样做。行x列。如果出现错误,您也可以像以前一样使用openpyxl加载工作簿,然后像这样将数据加载到pandas中:`df1=pd.DataFrame(ws1.values)'@Lynn我根本不会循环。熊猫非常强大,不需要任何循环就可以做你想做的事情,我试着创建一个例子,1分钟。@Lynn,更新。啊,好的,谢谢你的帖子,我会试试这个。我认为这是组合或连接两个不同的数据帧。我试图沿着许多不同的工作表遍历指定的单元格,提取数据,并基本上创建一个新的数据框。不过,我会尝试一下,看看是否能得到预期的结果。谢谢你的洞察力!