背景需求:
运用程序,自动匹配两个excle表格的数据。实现学号配对、数据提取和判断
新的需求:最后一列加入户籍地址
思路
1、在表格里补一个户籍地址的列
2、考虑把居住地址和户籍地址中的“居委”做成列表,删除
02、匹配学号并排序
'''
把已经合并成一个xlsx的园园通表格,与班级信息表一起匹配学号,并学号列升序、班级列升序
Deepseek,阿夏
20250831
'''
import pandas as pd
# 读取1.xlsx
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\20250825_2025_学年出入所(园)儿童基本情况登记 表一空'
df_main = pd.read_excel(path+r'\01(托小)园园通信息合并.xlsx')
# 获取2.xlsx的所有工作表名
xls = pd.ExcelFile(path+r'\班级信息表.xlsx')
sheet_names = xls.sheet_names # 获取工作表名称
# 读取并合并2.xlsx的所有工作表
df_list = []
for sheet in sheet_names:
df_sheet = pd.read_excel(xls, sheet_name=sheet)
# 确保每个工作表都有班级信息(工作表名作为班级)
df_sheet['班级'] = sheet # 添加班级列,值为工作表名
df_list.append(df_sheet)
df_info = pd.concat(df_list, ignore_index=True)
# 使用班级和姓名进行匹配
df_merged = pd.merge(df_main,
df_info[['班级', '姓名', '学号']],
left_on=['所在班级', '姓名'],
right_on=['班级', '姓名'],
how='left')
# 移动学号列到最前面
cols = df_merged.columns.tolist()
cols = ['学号'] + [col for col in cols if col != '学号']
df_merged = df_merged[cols]
# 关键修改:先按班级升序,同一班级内按学号升序
# 确保学号是数值类型,以便正确排序
df_merged['学号'] = pd.to_numeric(df_merged['学号'], errors='coerce')
# 按班级优先排序,再按学号排序
df_merged = df_merged.sort_values(by=['所在班级', '学号'], ascending=[True, True])
# 保存结果
df_merged.to_excel(path+r'\02(托小)园园通信息匹配学号.xlsx', index=False)
print("处理完成!已按班级升序排列,同班级内按学号升序排列。")
删除掉学校附近的居委会
'''
20250825_2025_学年出入所(园)儿童基本情况登记 表一空 05
1.去掉地址中的重复信息,如上海市上海市
2.去不掉居委会(列表指定内容删除)
deepseek,阿夏
20250827
'''
import pandas as pd
import re
def remove_duplicate_parts(address):
"""
去除地址中的连续重复部分和特定字样
"""
if pd.isna(address) or address == '':
return address
result = str(address)
# 首先处理完整的地址重复(如:上海市闵行区XXX上海市闵行区XXX)
# 匹配从开头到结尾的重复模式
duplicate_pattern = r'^(.+?)(?=\1)'
result = re.sub(duplicate_patte