当处理大型数据集时,通常需要将数据分组,并将每个分组的数据保存到单独的文件中。下面是一个使用 Python 中的 pandas 库来实现这一目标的示例代码。

步骤 1: 导入所需的库

import os
import pandas as pd

步骤 2: 读取 Excel 数据

# 读取 Excel 数据
df = pd.read_excel("C:\\Users\\liuchunlin2\\Desktop\\新建XLSX 工作表.xlsx")

步骤 3: 根据指定字段分组数据

# 根据学校、班级、老师字段分组
grouped = df.groupby(['学校', '班级', '老师'])

步骤 4: 创建保存拆分数据的文件夹

# 新建文件夹路径
folder_path = "C:\\Users\\liuchunlin2\\Desktop\\拆分数据"
os.makedirs(folder_path, exist_ok=True) # 检查文件夹是否存在,若不存在则创建

步骤 5: 遍历分组数据并保存到不同的 Excel 文件中

# 遍历分组,并将每个分组的数据保存到不同的 Excel 文件中
for name, group in grouped:
school, grade, teacher = name
filename = f"{school}_{grade}_{teacher}.xlsx"
file_path = os.path.join(folder_path, filename)
group.to_excel(file_path, index=False)

创建一个简单的图形用户界面,用于选择 Excel 文件并指定分组列,然后将数据按照分组保存到不同的 Excel 文件中

步骤 1: 导入所需的库

import tkinter as tk  # 导入 tkinter 模块,用于创建图形用户界面
from tkinter import filedialog # 导入 filedialog 子模块,用于打开文件对话框
import pandas as pd # 导入 pandas 库,用于数据处理
import os # 导入 os 模块,用于文件和目录操作

步骤 2: 定义函数,用于打开文件对话框并选择 Excel 文件路径

def browse_file():
# 打开文件对话框,限定文件类型为 Excel 文件 (*.xlsx)
filepath = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx")])
# 清空文件路径输入框,并将选定的文件路径插入到输入框中
file_entry.delete(0, tk.END)
file_entry.insert(0, filepath)

步骤 3: 定义函数,用于处理数据并将其按指定列分组保存为多个 Excel 文件

def process_data():
# 获取输入文件路径和需要分组的列名
input_file = file_entry.get()
group_columns = [column_entry.get() for column_entry in column_entries if column_entry.get()] # 检查输入是否完整
if not input_file or not group_columns:
result_label.config(text="Please provide input file path and group columns.")
return try:
# 读取 Excel 文件为 DataFrame,并按指定列进行分组
df = pd.read_excel(input_file)
grouped = df.groupby(group_columns) # 创建用于存储分组数据的文件夹
folder_name = "Splitted_Data"
if not os.path.exists(folder_name):
os.makedirs(folder_name) # 将每个分组的数据保存为单独的 Excel 文件
for name, group in grouped:
filename = f"{folder_name}/{'_'.join(name)}.xlsx"
group.to_excel(filename, index=False) result_label.config(text="Data processing completed successfully.")
except Exception as e:
result_label.config(text=f"Error occurred: {str(e)}")

步骤 4: 创建 tkinter 窗口对象并设置标题

root = tk.Tk()
root.title("Excel Data Grouping Tool") # 设置窗口标题

步骤 5: 创建标签和输入框,用于显示和输入 Excel 文件路径

file_label = tk.Label(root, text="Excel File Path:")
file_label.grid(row=0, column=0, padx=5, pady=5, sticky="w")
file_entry = tk.Entry(root, width=50)
file_entry.grid(row=0, column=1, padx=5, pady=5, sticky="we")
browse_button = tk.Button(root, text="Browse", command=browse_file)
browse_button.grid(row=0, column=2, padx=5, pady=5)

步骤 6: 创建标签、输入框和按钮,用于指定分组列名

column_label = tk.Label(root, text="Group Columns:")
column_label.grid(row=1, column=0, padx=5, pady=5, sticky="w")
column_entry = tk.Entry(root, width=50)
column_entry.grid(row=1, column=1, padx=5, pady=5, sticky="we")
column_entries = [column_entry] add_column_button = tk.Button(root, text="Add Column", command=lambda: add_column_entry())
add_column_button.grid(row=1, column=2, padx=5, pady=5)

步骤 7: 创建函数,用于添加新的分组列输入框

def add_column_entry():
new_column_entry = tk.Entry(root, width=50)
new_column_entry.grid(row=len(column_entries) + 1, column=1, padx=5, pady=5, sticky="we")
column_entries.append(new_column_entry)

步骤 8: 创建按钮,用于处理数据

process_button = tk.Button(root, text="Process Data", command=process_data)
process_button.grid(row=2, column=2, padx=5, pady=10, sticky="e") # 调整位置至右侧

步骤 9: 创建标签,用于显示处理结果信息

result_label = tk.Label(root, text="")
result_label.grid(row=len(column_entries) + 3, column=0, columnspan=3, padx=5, pady=5)

步骤 10: 启动主事件循环

root.mainloop()

完整代码:

import tkinter as tk  # 导入 tkinter 模块,用于创建图形用户界面
from tkinter import filedialog # 导入 filedialog 子模块,用于打开文件对话框
import pandas as pd # 导入 pandas 库,用于数据处理
import os # 导入 os 模块,用于文件和目录操作 # 定义函数,用于打开文件对话框并选择 Excel 文件路径
def browse_file():
# 打开文件对话框,限定文件类型为 Excel 文件 (*.xlsx)
filepath = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx")])
# 清空文件路径输入框,并将选定的文件路径插入到输入框中
file_entry.delete(0, tk.END)
file_entry.insert(0, filepath) # 定义函数,用于处理数据并将其按指定列分组保存为多个 Excel 文件
def process_data():
# 获取输入文件路径和需要分组的列名
input_file = file_entry.get()
group_columns = [column_entry.get() for column_entry in column_entries if column_entry.get()] # 检查输入是否完整
if not input_file or not group_columns:
result_label.config(text="Please provide input file path and group columns.")
return try:
# 读取 Excel 文件为 DataFrame,并按指定列进行分组
df = pd.read_excel(input_file)
grouped = df.groupby(group_columns) # 创建用于存储分组数据的文件夹
folder_name = "Splitted_Data"
if not os.path.exists(folder_name):
os.makedirs(folder_name) # 将每个分组的数据保存为单独的 Excel 文件
for name, group in grouped:
filename = f"{folder_name}/{'_'.join(name)}.xlsx"
group.to_excel(filename, index=False) result_label.config(text="Data processing completed successfully.")
except Exception as e:
result_label.config(text=f"Error occurred: {str(e)}") # 创建 tkinter 窗口对象
root = tk.Tk()
root.title("Excel Data Grouping Tool") # 设置窗口标题 # 创建标签和输入框,用于显示和输入 Excel 文件路径
file_label = tk.Label(root, text="Excel File Path:")
file_label.grid(row=0, column=0, padx=5, pady=5, sticky="w")
file_entry = tk.Entry(root, width=50)
file_entry.grid(row=0, column=1, padx=5, pady=5, sticky="we")
browse_button = tk.Button(root, text="Browse", command=browse_file)
browse_button.grid(row=0, column=2, padx=5, pady=5) # 创建标签、输入框和按钮,用于指定分组列名
column_label = tk.Label(root, text="Group Columns:")
column_label.grid(row=1, column=0, padx=5, pady=5, sticky="w")
column_entry = tk.Entry(root, width=50)
column_entry.grid(row=1, column=1, padx=5, pady=5, sticky="we")
column_entries = [column_entry] add_column_button = tk.Button(root, text="Add Column", command=lambda: add_column_entry())
add_column_button.grid(row=1, column=2, padx=5, pady=5) # 创建函数,用于添加新的分组列输入框
def add_column_entry():
new_column_entry = tk.Entry(root, width=50)
new_column_entry.grid(row=len(column_entries) + 1, column=1, padx=5, pady=5, sticky="we")
column_entries.append(new_column_entry) # 创建按钮,用于处理数据
process_button = tk.Button(root, text="Process Data", command=process_data)
process_button.grid(row=2, column=2, padx=5, pady=10, sticky="e") # 调整位置至右侧 # 创建标签,用于显示处理结果信息
result_label = tk.Label(root, text="")
result_label.grid(row=len(column_entries) + 3, column=0, columnspan=3, padx=5, pady=5) # 启动主事件循环
root.mainloop()

Python分组数据并保存到单独的文件中的更多相关文章

  1. Flex4学习笔记2--代码保存在单独的文件中

    1 <!--调用外部as文件--> <fx:Script> <![CDATA[ import mx.controls.Alert; import a.Test3; ]]& ...

  2. python 合并两个文件并将合并内容保存在另一个文件中

    简单地文件合并方法 思路如下: 分别读取两个文件中的内容,并将其保存在一个列表中,将列表通过join()函数转为字符,并将新字符保存在新的文件中. 其中,test1.txt中的内容为: test2.t ...

  3. MATLAB实例:新建文件夹,保存.mat文件并保存数据到.txt文件中

    MATLAB实例:新建文件夹,保存.mat文件并保存数据到.txt文件中 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 用MATLAB实现:指定路径下 ...

  4. python数据可视化-matplotlib入门(6)-从文件中加载数据

    前几篇都是手动录入或随机函数产生的数据.实际有许多类型的文件,以及许多方法,用它们从文件中提取数据来图形化. 比如之前python基础(12)介绍打开文件的方式,可直接读取文件中的数据,扩大了我们的数 ...

  5. 保存文件名至txt文件中,不含后缀

    准备深度学习的训练数据时,可能会用到将图片文件名保存到txt文件中,所以用python实现了该功能.输入参数只设了两个,图片存放路径,和输出的txt文件名. 代码里写死了只识别.jpg格式,并不进行目 ...

  6. java web 通过前台输入的数据(name-value)保存到后台 xml文件中

    一:项目需求,前端有一个页面,页面中可以手动输入一些参数数据,通过点击前端的按钮,使输入的数据保存到后台生成的.xml文件中 二:我在前端使用的是easyui的propertygrid,这个能通过da ...

  7. 将Json数据保存在静态脚本文件中读取

    一些常用的数据例如一些网站的区域信息被改变的可能性不大,一般不通过请求获取,于是我们选择存在静态文件中,例如以下Demo: 1.动态加载Json数据显示到前台 [HttpPost] public Ac ...

  8. 吴裕雄--天生自然python学习笔记:python文档操作批量替换 Word 文件中的文字

    我们经常会遇到在不同的 Word 文件中的需要做相同的文字替换,若是一个一个 文件操作,会花费大量时间 . 本节案例可以找出指定目录中的所有 Word 文件(包含 子目录),并对每一个文件进行指定的文 ...

  9. 合并csv文件保存到一个csv文件中-保留表头

    主要实现功能: 在同一文件夹下的所有csv文件全部合并到同一个csv文件中,并将csv文件的表头保留 1 import os 2 import pandas as pd 3 path = os.get ...

  10. Log4j分级别保存日志到单个文件中,并记录IP和用户信息

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration S ...

随机推荐

  1. 机器学习策略篇:详解正交化(Orthogonalization)

    正交化 这是一张老式电视图片,有很多旋钮可以用来调整图像的各种性质,所以对于这些旧式电视,可能有一个旋钮用来调图像垂直方向的高度,另外有一个旋钮用来调图像宽度,也许还有一个旋钮用来调梯形角度,还有一个 ...

  2. 统信UOS系统开发笔记(四):从Qt源码编译安装之编译安装QtCreator4.11.2,并配置编译测试Demo

    前言   上一篇已经从Qt源码编译了Qt,那么Qt开发的IDE为QtCreator,本篇从源码编译安装QtCreator,并配置好构建套件,运行Demo并测试.   统信UOS系统版本   系统版本: ...

  3. 用NavigationManager实现订单的列表和新增页面之间的导航

    1.在订单列表页面放置"新增"按钮 2.注入NavigationManager,按钮被点击后导航到新增订单的路径 3.测试一下,能工作了. 4.订单新增后,返回订单列表页面 5.测 ...

  4. Jmeter中属性跟变量的区别?

    Jmeter属性全局生效,变量局部生效,jmeter属性默认读取jmeter.properties中的属性配置,在jmeter运行过程中,通过函数${_setProperty(属性名,属性值)来定义 ...

  5. 继续总结Python中那些简单好用的用法

    上一篇文章Python中那些简单又好用的特性和用法发出后,群里的小伙伴又给补充了几个好用的用法,结合生产实用经验汇总整理如下,各位看官如有需要请自取 反射,反射是一种机制,可以在运行时获取.检查和修改 ...

  6. Java 程序员第一次运行 Python 项目,使用 python-pptx 提取 ppt 中的文字和图片

    人工智能时代,最需要学习的编程语言是:python .笔者是个 python 小白,昨天花了两个小时,第一次成功运行起来 python 项目 . 项目是 powerpoint-extractor ,可 ...

  7. [.Net]使用Soa库+Abp搭建微服务项目框架(一):Abp与DDD相关知识回顾

    ​ 在企业中大型项目中,随着业务的不断拓展,项目发展到一定程度,需要寻求项目的各模块解耦,独立成为微服务.如何实现呢? 首先我们先来简单回顾一下Abp框架怎样实现(DDD)领域驱动设计的,Abp框架的 ...

  8. Swagger (API框架,API 文档 与API 定义同步更新)

    1.依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring ...

  9. Github登录 2FA(Two-Factor Authentication/两因素认证) 浏览器插件-已验证

    Github登录 2FA(Two-Factor Authentication/两因素认证) 浏览器插件-已验证 chrome 装下这个扩展 身份验证器 https://chromewebstore.g ...

  10. 基于stm32的spi接口dma 数据收发实例解析

    一 前记 SPI接口平时用的比较少,再加上对CUBEMX不是很熟悉,这里踩了不少坑才把问题解决.针对遇到了不少问题,是要值得梳理一下了. 二 源码解析 1 SPI的DMA发送端配置: 2 主函数源码: ...