python提取一个文件夹中多个excel的某一个sheet中的特定区域的数据,并合并输出

我的需求:
希望得到一个利用python提取excel中的特定区域的数据,并将提取的数据并排输出。
我的知识范围内,好像是需要pandas、list、dateframe等
举例:
一个文件夹中有20个数据格式相同的excel文件,从这20个excel的“sheet1”中提取 A1:E50 这块区域的数据。
然后输出的结果是,这20个A1:E50的数据,按照文件的顺序并排按顺序依次排列。

大致意思如下图所示

img

谢谢各位解答


看了几位的方法,自己尝试了一下,出现下图的问题,请问如何解决

img


我把问题描述清楚一些:
1、有一个文件夹,里面有20个excel文件、每个excel文件里有多个sheet

img

2、如下图,我需要每个excel文件里“利润表”这个sheet中的D3:G50这篇区域的数据。

img

3、最后将结果导出到新的excel文件中,按照文件夹中每个excel的顺序将利润表中D3:G50这片区域的数据,并排向右排列,如下图所示,(红框里的文件名是为了提问,方便理解,我手动打上去的)

img

操作Excel的话,推荐用openpyxl除了能读取,Excel有的公式、样式设置……功能它都有

实现代码:

import pandas as pd
import os

dfs = pd.DataFrame()
# os.walk(file_path) 深度遍历file_path下的所有子文件夹及文件
for root_dir, sub_dir, files in os.walk(r'C:\Users\gnnEx\Desktop\test'):
    for file in files:
        if file.endswith(".xlsx"):
            # 构造绝对路径
            file_name = os.path.join(root_dir, file)
            print(file_name)
            # 读取sheet页
            df = pd.read_excel(file_name, sheet_name='Sheet1', header=None)
            print(df)
            dfs = pd.concat([dfs, df], axis=1)

print(dfs)

打印输出:

D:\Anaconda3\envs\python37\python.exe F:/NewDevelopment/test_py/test/tmp_pandas.py
C:\Users\gnnEx\Desktop\test\f1.xlsx
   0  1
0  A  A
1  A  A
C:\Users\gnnEx\Desktop\test\f2.xlsx
   0  1
0  B  B
1  B  B
C:\Users\gnnEx\Desktop\test\f3.xlsx
   0  1
0  C  C
1  C  C
   0  1  0  1  0  1
0  A  A  B  B  C  C
1  A  A  B  B  C  C

Process finished with exit code 0

python 如何提取多个excel表中内容合并处理
可以借鉴下
https://blog.csdn.net/weixin_41744624/article/details/113643450

对的,是需要。提供实例【利用Python+Pandas实现从一个excel表中提取列形成新表】,链接:https://blog.csdn.net/qq_39541326/article/details/107221834?spm=1001.2101.3001.6650.12&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-12-107221834-blog-125292493.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-12-107221834-blog-125292493.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=19

下面两个路径改一下就可以了,另外注意一下你的"sheet1" 是不是小写的

import pandas as pd

path1='F:/ZZF/EXCELS/' ##文件路径
path2='F:/ZZF/result.xlsx' ##结果保存路径路径

fs=os.listdir(path1)

df0=pd.DataFrame()
for f in fs:
    df1=pd.read_excel(f,sheet_name='sheet1',header=None)
    df0=pd.concat([df0,df1.iloc[:50,:5]],axis=1)
    
df0.to_excel(path2,header=None,index=0)

报错那个,把 \ 换成 / 或者 \ ,向楼上那位答主那样:path1='F:/ZZF/EXCELS/'

实现代码如下:

import pandas as pd
import glob

global df_concat

# 这里假设你把存放excel的那个文件夹放在D盘下,文件夹指的是你存放excel的那个文件的名字
file_list = glob.glob('D:/文件夹/*.xlsx')
num = 1
for file in file_list:
    # header=2表示从表格的第三行开始读取数据,并把第三行作为表头, 因为想要的数据就是从第三行开始的
    # usecols='C:G'表示只读取C列到G列这几列的数据, 因为我们想要的就是这几列的数据
    df = pd.read_excel(file, sheet_name='利润表', header=2, usecols='C:G')

    df_sel = df.iloc[:47, :]
    # print(df_sel)
    if num == 1:
        df_concat = df_sel
    else:
        df_concat = pd.concat([df_concat, df_sel], axis=1)
    # print('#' * 30)
    print(df_concat)
    num += 1

# 这里假设把最终生成的表格保存在放excel的那个文件夹下面新建的一个output文件夹里, 并把excel表格命名为result.xlsx
df_concat.to_excel('D:/文件夹/output/result.xlsx', index=False)

你把这段代码中的路径改为自己实际中用的路径就可以了。

这个简单,先把所有excel表名获取。

dir_list = os.listdir("你的目录")

这样遍历的全部excel文件名称就有了。

使用 pandas 库的 concat() 函数来实现从多个表中提取数据并拼接到一个 DataFrame 中。

首先需要使用 pandas 库的 read_csv() 函数或 read_excel() 函数读取这些表格文件,然后使用 concat() 函数拼接它们。

import pandas as pd

# 读取表格文件1
df1 = pd.read_csv('table1.csv')
# 读取表格文件2
df2 = pd.read_excel('table2.xlsx')

# 提取每个表的前两列数据
df1 = df1.iloc[:, :2]
df2 = df2.iloc[:, :2]

# 拼接两个表格
df = pd.concat([df1, df2])

# 查看拼接后的表格
print(df)

上面的代码首先读取了两个表格文件,然后提取每个表的前两列数据,最后使用 concat() 函数将两个表格拼接在一起。

注意,在使用 concat() 函数时,需要将多个表格放在一个列表中作为参数传入,例如 pd.concat([df1, df2])。如果想要改变拼接的方向,可以使用 axis 参数来指定拼接的方向,例如 pd.concat([df1, df2], axis=1)。

希望上面的信息能帮助实现从多个表中提取数据并拼接到一个 DataFrame 中。