当前位置:首页>python>户籍数据排序愁死人?这套 Python 脚本一键搞定,新手也能秒会

户籍数据排序愁死人?这套 Python 脚本一键搞定,新手也能秒会

  • 2026-09-22 18:08:44
户籍数据排序愁死人?这套 Python 脚本一键搞定,新手也能秒会

今天给大家分享一份可直接复用的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. 运行方法

  1. 打开Python编辑器(PyCharm、IDLE、VS Code均可),新建一个.py文件;
  2. 复制上面的脚本,粘贴到文件中;
  3. 修改input_file为你的Excel文件路径;
  4. 点击运行,等待几秒,排序结果会自动保存到output_file指定的路径中。

2. 常见报错及解决方法

  • 报错「No module named 'pandas'」:未安装库,运行pip install pandas openpyxl即可;
  • 报错「FileNotFoundError」:文件路径错误,检查路径是否正确,推荐使用原始字符串(加r前缀)避免转义问题;
  • 排序后户编号失真:忘记设置dtype={"户编号": str},重新添加该参数即可;
  • 报错「KeyError: '人数'」:Excel中缺少「人数」字段,或字段名拼写错误。

这份脚本的核心优势就是「通用、高效、零门槛」——无需懂复杂的Python语法,只要替换文件路径,就能一键完成户籍数据排序,适合户籍统计、社区办公、档案管理等各类场景。

以后再遇到大量户籍数据排序,再也不用手动拖拽Excel,复制脚本、修改路径,几分钟就能搞定,把时间花在更重要的工作上~

获取和交流

需要本章或其他文章的源码和数据的同学,关注+三连,在对应文章下评论“6666“,加下面微信,发你!也可以拉你进群交流学习,加群备注:IT小本本学习

为了能随时获取最新动态,大家可以动动小手将公众号添加到“星标⭐”哦,点赞 + 关注,用时不迷路!!!!

关注公众号:IT小本本 👇

用时不迷路!!

最新文章

随机文章