import pandas as pd import json from datetime import datetime # 读取Excel文件 file_path = r'e:\project\python\工具\智慧校园\本部\消费数据\2024学生.xlsx' df = pd.read_excel(file_path) print("=" * 80) print("学生消费数据提取") print("=" * 80) # 1. 提取年级ID和班级ID(供用户查表) grade_ids = sorted(df['gradeId'].unique().tolist()) class_ids = sorted(df['classId'].unique().tolist()) print(f"\n【年级ID列表】(共{len(grade_ids)}个):") print(grade_ids) print(f"\n【班级ID列表】(共{len(class_ids)}个):") print(class_ids) # 2. 提取学生消费信息 student_records = [] for _, row in df.iterrows(): record = { '学号': str(row['stuNo']), '姓名': row['stuName'], '年级ID': row['gradeId'], '班级ID': row['classId'], '支付金额(元)': row['totalFee'] / 100, # 转换为元 '支付状态': '支付成功' if row['payState'] == 1 else '其他', '创建时间': row['createTime'].strftime('%Y-%m-%d %H:%M:%S') if pd.notna(row['createTime']) else '', '支付时间': row['payTime'].strftime('%Y-%m-%d %H:%M:%S') if pd.notna(row['payTime']) else '', '物理卡号': str(row['serialNo']) if pd.notna(row['serialNo']) else '', 'teamId': row['teamId'] } student_records.append(record) # 3. 统计信息 print(f"\n【数据统计】") print(f"总记录数: {len(student_records)}") print(f"唯一学生数: {df['stuNo'].nunique()}") print(f"总金额: {df['totalFee'].sum() / 100:.2f} 元") # 4. 按年级统计 print(f"\n【按年级统计】") grade_stats = df.groupby('gradeId').agg({ 'stuNo': 'nunique', 'totalFee': 'sum' }).reset_index() grade_stats.columns = ['年级ID', '学生人数', '总金额(分)'] grade_stats['总金额(元)'] = grade_stats['总金额(分)'] / 100 print(grade_stats.to_string(index=False)) # 5. 按班级统计 print(f"\n【按班级统计】") class_stats = df.groupby('classId').agg({ 'stuNo': 'nunique', 'totalFee': 'sum' }).reset_index() class_stats.columns = ['班级ID', '学生人数', '总金额(分)'] class_stats['总金额(元)'] = class_stats['总金额(分)'] / 100 print(class_stats.to_string(index=False)) # 6. 保存详细记录到JSON output_file = r'e:\project\python\工具\智慧校园\本部\消费数据\student_records.json' with open(output_file, 'w', encoding='utf-8') as f: json.dump(student_records, f, ensure_ascii=False, indent=2) print(f"\n【输出文件】") print(f"详细记录已保存到: {output_file}") # 7. 保存ID映射表(等待用户补充年级和班级名称) id_mapping = { 'grade_ids': grade_ids, 'class_ids': class_ids, 'note': '请查询数据库补充年级名称和班级名称' } id_mapping_file = r'e:\project\python\工具\智慧校园\本部\消费数据\id_mapping.json' with open(id_mapping_file, 'w', encoding='utf-8') as f: json.dump(id_mapping, f, ensure_ascii=False, indent=2) print(f"ID映射表已保存到: {id_mapping_file}") print("\n请查询数据库,告诉我以下ID对应的名称:") print(f"年级ID: {grade_ids}") print(f"班级ID: {class_ids}")