import pandas as pd import datetime import tkinter as tk # 获取当前日期,格式为年月日 now = datetime.datetime.now().strftime('%Y%m%d') # 读取Excel文件 data = pd.read_excel(r'E:\每日数据\智能POS明细.xlsx',dtype={'商户编号':str,'终端编号':str}) # 获取省份列表 department_list = data['省份'].unique() # 事件处理程序,按省份提取数据 def extract_by_department(): # 用户输入省份名称 department_name = department_entry.get() # 按照省份拆分数据 if department_name in department_list: new_df = data[data['省份'] == department_name ] file_name = department_name + '智能POS明细' + now + '.xlsx' new_df.to_excel(file_name, index=False) result_label.config(text="数据提取成功!") else: result_label.config(text="闲的没事干了,就去给靓坤一大逼斗,请重新选择!!!") # 事件处理程序,全部提取数据 def extract_all(): # 循环按照省份拆分数据 for department in department_list: new_df = data[data['省份'] == department] file_name = department + '智能POS明细' + now + '.xlsx' new_df.to_excel(file_name, index=False) result_label.config(text="数据提取成功!") # 创建窗口 window = tk.Tk() window.title("智能POS明细数据提取") window.geometry("400x200") # 创建控件 department_label = tk.Label(window, text="省份名称:") department_entry = tk.Entry(window) extract_by_department_button = tk.Button(window, text="按省提取", command=extract_by_department) extract_all_button = tk.Button(window, text="全部提取", command=extract_all) result_label = tk.Label(window, text="") # 显示控件 department_label.pack() department_entry.pack() extract_by_department_button.pack() extract_all_button.pack() result_label.pack() # 运行窗口 window.mainloop()
时间: 2024-03-30 13:34:48 浏览: 60
详解pandas数据合并与重塑(pd.concat篇)
5星 · 资源好评率100%
这段代码的功能是读取一个 Excel 文件,按照省份提取数据,并将提取后的结果保存为新的 Excel 文件。用户可以在 GUI 界面中选择提取全部数据或按照指定省份提取数据。
下面是一些可以改进代码的建议:
1. 在 GUI 界面中添加一个按钮,用于选择要提取数据的 Excel 文件。这样,用户就可以选择任意 Excel 文件进行数据提取,而不是固定使用 `E:\每日数据\智能POS明细.xlsx` 这个路径。
2. 将数据提取的代码封装成一个函数,这样可以提高代码的复用性。函数的输入参数可以是要提取数据的 Excel 文件路径和要提取的省份名称,输出结果可以是一个 DataFrame。
3. 在 `extract_all` 函数中,可以将多次写入 Excel 文件的代码合并为一次,这样可以提高写入效率。
4. 在代码中添加错误处理机制,例如当用户选择的 Excel 文件不存在时,程序应该提示用户重新选择。
下面是改进后的代码:
```python
import pandas as pd
import datetime
import tkinter as tk
from tkinter import filedialog
# 获取当前日期,格式为年月日
now = datetime.datetime.now().strftime('%Y%m%d')
# 事件处理程序,按省份提取数据
def extract_by_department(file_path, department_name):
# 读取 Excel 文件中的数据
data = pd.read_excel(file_path, dtype={'商户编号': str, '终端编号': str})
# 按照省份拆分数据
if department_name in data['省份'].unique():
new_df = data[data['省份'] == department_name]
file_name = department_name + '智能POS明细' + now + '.xlsx'
new_df.to_excel(file_name, index=False)
return new_df
else:
raise ValueError("无效的省份名称!")
# 事件处理程序,全部提取数据
def extract_all(file_path):
# 读取 Excel 文件中的数据
data = pd.read_excel(file_path, dtype={'商户编号': str, '终端编号': str})
# 循环按照省份拆分数据
grouped_data = data.groupby('省份')
for department, group in grouped_data:
file_name = department + '智能POS明细' + now + '.xlsx'
group.to_excel(file_name, index=False)
return grouped_data
# 创建窗口
window = tk.Tk()
window.title("智能POS明细数据提取")
window.geometry("400x200")
# 创建控件
file_label = tk.Label(window, text="Excel文件:")
file_entry = tk.Entry(window)
file_button = tk.Button(window, text="选择文件", command=lambda: file_entry.insert(tk.END, filedialog.askopenfilename(title="选择Excel文件", filetypes=[("Excel文件", "*.xlsx"), ("所有文件", "*.*")])))
department_label = tk.Label(window, text="省份名称:")
department_entry = tk.Entry(window)
extract_by_department_button = tk.Button(window, text="按省提取", command=lambda: result_label.config(text=extract_by_department(file_entry.get(), department_entry.get())))
extract_all_button = tk.Button(window, text="全部提取", command=lambda: result_label.config(text=extract_all(file_entry.get())))
result_label = tk.Label(window, text="")
# 显示控件
file_label.pack()
file_entry.pack()
file_button.pack()
department_label.pack()
department_entry.pack()
extract_by_department_button.pack()
extract_all_button.pack()
result_label.pack()
# 运行窗口
window.mainloop()
```
这个代码将创建一个窗口,其中包含一个 "选择文件" 按钮和一个文本框,用于让用户选择要提取数据的 Excel 文件。当用户选择文件并输入省份名称后,可以点击 "按省提取" 按钮提取指定省份的数据,或者点击 "全部提取" 按钮提取所有省份的数据。提取结果将会显示在窗口的下方。
阅读全文