python批量处理excel#指定行列提取合并#

#求帮助#python批量处理excel#指定行列提取合并#
已知条件:同一文件夹(路径:F:\excel表汇总) 下若干个不同名称的excel表:表1.xlsx、表2.xlsx……
打开后的格式如下:

img

每个excel表打开后均相同,即黄色背景区域的标题和内容均相同, 仅有count、area、sum列下的数值不同

现在需要完成以下操作:
1.将所有excel表中第三列的内容(除列标题)进行提取,在新表中以行的形式合并(所处位置为第二列和第三列)
2.选择任意一个表的第二列作为合并所有内容后的列标题,excel表的名称作为合并所有内容后表的行标题
即达到效果如下

img

虽然题主是希望用python操作,但我与题主一样是arcmap的使用者,也常操作类似问题,考虑题主已经导出来excel,这里提供我的操作方法,直接Excel合并,点点鼠标,一分钟搞定。优势在于不用安装各种库,而且能在任何有Excel的电脑操作。

img

img

img

img

img

img

img

img

img

以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:

思路:

  1. 遍历文件夹下的所有excel文件,打开每个文件并读取第三列的内容(除去列标题),将这些内容存储到一个列表中。
  2. 将所有列表中的内容合并到一个新的列表中,每个元素为一个包含两个值的元组,第一个值为excel文件名,第二个值为第三列的内容。
  3. 将新的列表转化为一个字典,以excel文件名为键,第三列的内容为值。
  4. 将字典转化为一个DataFrame,并将第二列作为列标题。
  5. 将DataFrame写入新的excel文件中。

代码实现如下:

import os
import pandas as pd

# 定义文件夹路径
folder_path = "F:\\excel表汇总"

# 定义列表存储第三列的内容
data = []

# 遍历文件夹下的所有excel文件
for file_name in os.listdir(folder_path):
    if file_name.endswith(".xlsx"):
        file_path = os.path.join(folder_path, file_name)
        # 打开excel文件
        excel_file = pd.read_excel(file_path)
        # 读取第三列的内容
        col_data = list(excel_file.iloc[:, 2])[1:]
        # 存储到data列表中
        data.append((file_name, col_data))

# 合并所有列表中的内容到一个新的列表中
merged_data = []
for item in data:
    for value in item[1]:
        merged_data.append((item[0], value))

# 转化为字典
dict_data = {}
for item in merged_data:
    if item[0] not in dict_data:
        dict_data[item[0]] = []
    dict_data[item[0]].append(item[1])

# 转化为DataFrame
df = pd.DataFrame(dict_data)
# 将第二列作为列标题
df.columns = list(df.iloc[0, :])
df = df.iloc[1:, :]

# 将DataFrame写入新的excel文件中
df.to_excel(os.path.join(folder_path, "merged.xlsx"), index=False)

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
以下是代码实现:

import os
import openpyxl

# 获取文件夹下所有excel文件的路径
path = r'F:\excel表汇总'
file_list = [os.path.join(path, f) for f in os.listdir(path) if f.endswith('.xlsx')]

# 创建新的excel表格
new_wb = openpyxl.Workbook()
new_ws = new_wb.active
new_ws.title = '合并表格'

# 将第二列的标题写入新表格
col_2_title = ''
for file in file_list:
    wb = openpyxl.load_workbook(file)
    ws = wb.active
    if col_2_title == '':
        col_2_title = ws.cell(row=1, column=2).value
        new_ws.cell(row=1, column=2, value=col_2_title)
    else:
        assert col_2_title == ws.cell(row=1, column=2).value, '第二列的标题不一致'

# 从每个表格中提取第三列的内容,并将结果写入新表格
row = 2  # 新表格从第二行开始写入数据
for file in file_list:
    wb = openpyxl.load_workbook(file)
    ws = wb.active
    for i in range(2, ws.max_row + 1):
        value = ws.cell(row=i, column=3).value
        new_ws.cell(row=row, column=2, value=file.split('\\')[-1].split('.')[0])
        new_ws.cell(row=row, column=3, value=value)
        row += 1

# 保存新表格
new_wb.save(os.path.join(path, '合并表格.xlsx'))

代码步骤解释:

  1. 获取指定文件夹下所有以.xlsx结尾的文件路径。
  2. 创建一个新的excel表格,命名为合并表格
  3. 遍历每个excel文件,提取其第二列的标题(只在第一个文件中写入),并检查所有文件的第二列标题是否相同。
  4. 遍历每个excel文件,提取其第三列的数据,并将结果写入新表格的第二列和第三列,同时将文件名作为行标题写入第一列。
  5. 保存新表格到指定路径。

注意事项:

  1. 需要安装openpyxl库。
  2. 假设每个表都有标题行,所以从第二行开始写入数据。
  3. 新表格的第一列是文件名,第二列是各个excel文件的第二列标题,第三列是数据。
    如果我的回答解决了您的问题,请采纳!