今天给大家分享一份可直接复用的Python脚本,无需复杂操作,导入Excel文件就能一键完成标准化排序,新手也能轻松上手,彻底解放双手!
要求:需要对数据进行按「户编号+与户主关系+年龄」层层排序。
一、前置准备
在运行脚本前,只需做好两个简单准备:
1. 环境准备
确保电脑安装了Python,以及两个必要的库(复制命令在终端运行即可):
pip install pandas openpyxl
说明:pandas负责数据处理,openpyxl负责读取和保存Excel文件,缺一不可。
2. 数据准备(数据如下)
将户籍数据整理成Excel文件,:
拿到上面数据,首先看到有的户主没有在第一位,所有需要处理。- 与户主关系:需包含「户主、配偶、之子、之女、之父、之母」(其他关系自动归为末位);
二、完整脚本(直接复制,替换路径即可用)
import pandas as pd
# ---------------------- 1. 配置文件路径 ----------------------
# 替换成你的Excel文件路径
#
input_file = "户籍.xlsx"
# 输出文件路径(可自定义)
output_file = "户籍排序结果.xlsx"
# ---------------------- 2. 读取Excel文件 ----------------------
# 读取数据,强制将户编号设为文本格式,避免编号失真
df = pd.read_excel(input_file, dtype={"户编号": str}, engine="openpyxl")
print(f"步骤2完成:成功读取 {len(df)} 条记录\n")
# ---------------------- 3. 定义排序优先级 ----------------------
relation_order = {
"户主": 0,
"配偶": 1,
"之子": 2, "之女": 2, # 子女优先级相同
"之父": 3, "之母": 3# 父母优先级相同
}
# ---------------------- 4. 核心排序逻辑(组内排序) ----------------------
# 给每条记录添加排序权重,匹配亲属关系优先级
df["排序权重"] = df["与户主关系"].map(relation_order).fillna(99).astype(int)
# 组内排序规则:户编号 → 关系权重 → 年龄(从小到大)
sorted_df = df.sort_values(
by=["户编号", "排序权重", "年龄"],
ascending=[True, True, True]
)
# 删除辅助列,保持数据整洁
sorted_df = sorted_df.drop(columns=["排序权重"])
# ---------------------- 5. 调整户顺序(按人数降序) ----------------------
# 提取每户的人数(同户人数相同,取第一条记录即可)
household_size = sorted_df.groupby("户编号")["人数"].first().reset_index()
household_size.columns = ["户编号", "户人数"]
# 将人数信息合并到数据中
sorted_df = sorted_df.merge(household_size, on="户编号", how="left")
# 整体排序规则:户人数(降序)→ 户编号(降序)
final_df = sorted_df.sort_values(
by=["户人数", "户编号"],
ascending=[False, False]
)
# 删除辅助列,重置索引(避免排序后索引混乱)
final_df = final_df.drop(columns=["户人数"]).reset_index(drop=True)
# ---------------------- 6. 输出结果 ----------------------
print("排序后结果(按您要求的顺序):")
print(final_df.to_string(index=False))
# 保存排序后的结果到Excel
final_df.to_excel(output_file, index=False, engine="openpyxl")
print(f"\n结果已保存至 → {output_file}")
四、关键步骤解读
1. 户编号格式设置
代码中dtype={"户编号": str}是关键!如果户编号是长数字,不设为文本格式,Excel会自动转成科学计数法,导致排序出错,这一步一定要保留。
2. 亲属关系优先级
relation_order字典定义了排序规则,数字越小优先级越高。如果有其他亲属关系(如「之孙」「之媳」),可以直接添加到字典中,比如:
relation_order = {
"户主": 0,
"配偶": 1,
"之子": 2, "之女": 2,
"之父": 3, "之母": 3,
"之孙": 4, "之媳": 4
}
3. 排序逻辑
整个排序分两步:先按「户编号→关系权重→年龄」排户内顺序,再按「户人数降序→户编号降序」排整体顺序,逻辑清晰且精准。
五、运行方法+常见问题
1. 运行方法
- 打开Python编辑器(PyCharm、IDLE、VS Code均可),新建一个.py文件;
- 修改
input_file为你的Excel文件路径; - 点击运行,等待几秒,排序结果会自动保存到
output_file指定的路径中。
2. 常见报错及解决方法
- 报错「No module named 'pandas'」:未安装库,运行
pip install pandas openpyxl即可; - 报错「FileNotFoundError」:文件路径错误,检查路径是否正确,推荐使用原始字符串(加r前缀)避免转义问题;
- 排序后户编号失真:忘记设置
dtype={"户编号": str},重新添加该参数即可; - 报错「KeyError: '人数'」:Excel中缺少「人数」字段,或字段名拼写错误。
这份脚本的核心优势就是「通用、高效、零门槛」——无需懂复杂的Python语法,只要替换文件路径,就能一键完成户籍数据排序,适合户籍统计、社区办公、档案管理等各类场景。
以后再遇到大量户籍数据排序,再也不用手动拖拽Excel,复制脚本、修改路径,几分钟就能搞定,把时间花在更重要的工作上~
获取和交流
需要本章或其他文章的源码和数据的同学,关注+三连,在对应文章下评论“6666“,加下面微信,发你!也可以拉你进群交流学习,加群备注:IT小本本学习
为了能随时获取最新动态,大家可以动动小手将公众号添加到“星标⭐”哦,点赞 + 关注,用时不迷路!!!!
关注公众号:IT小本本 👇