news 2026/5/16 0:52:27

模块四-数据转换与操作——21. 数据去重与重命名

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
模块四-数据转换与操作——21. 数据去重与重命名

21. 数据去重与重命名

1. 概述

数据去重和重命名是数据清洗中的常用操作。去重用于删除重复记录,重命名用于修改列名或索引名,使数据更易于理解和处理。

importpandasaspdimportnumpyasnp# 创建示例数据df=pd.DataFrame({'姓名':['张三','李四','王五','张三','赵六','李四'],'年龄':[25,30,28,25,32,30],'城市':['北京','上海','广州','北京','深圳','上海'],'工资':[8000,12000,10000,8000,15000,12000]})print("原始数据:")print(df)

2. 数据去重

2.1 检测重复

# 检测完全重复的行print("完全重复检测:")print(df.duplicated())# 基于指定列检测重复print("\n基于'姓名'检测重复:")print(df.duplicated(subset=['姓名']))# 标记所有重复(包括第一次)print("\n标记所有重复:")print(df.duplicated(keep=False))

2.2 删除重复

# 删除完全重复(保留第一次)print("删除完全重复:")print(df.drop_duplicates())# 基于姓名去重print("\n基于姓名去重:")print(df.drop_duplicates(subset=['姓名']))# 保留最后一次出现print("\n保留最后一次:")print(df.drop_duplicates(subset=['姓名'],keep='last'))# 删除所有重复(只保留唯一值)print("\n删除所有重复:")print(df.drop_duplicates(subset=['姓名'],keep=False))

2.3 去重后聚合

# 去重后保留最大值df_max=df.sort_values('工资',ascending=False).drop_duplicates(subset=['姓名'])print("保留最高工资:")print(df_max)# 去重后求和df_sum=df.groupby('姓名').agg({'年龄':'first','城市':'first','工资':'sum'}).reset_index()print("\n聚合求和:")print(df_sum)

3. 重命名列

3.1 使用 rename() 方法

# 重命名单个列df_renamed=df.rename(columns={'姓名':'name','年龄':'age'})print("重命名单个列:")print(df_renamed.columns.tolist())# 重命名多个列df_renamed=df.rename(columns={'姓名':'name','年龄':'age','城市':'city','工资':'salary'})print("\n重命名多个列:")print(df_renamed.columns.tolist())# 原地修改df.rename(columns={'姓名':'name'},inplace=True)print("\n原地修改后:")print(df.columns.tolist())

3.2 批量重命名

# 恢复列名df.rename(columns={'name':'姓名'},inplace=True)# 使用字典推导式批量添加前缀new_columns={col:f'col_{col}'forcolindf.columns}df_prefixed=df.rename(columns=new_columns)print("批量添加前缀:")print(df_prefixed.columns.tolist())# 批量添加后缀new_columns={col:f'{col}_字段'forcolindf.columns}df_suffixed=df.rename(columns=new_columns)print("\n批量添加后缀:")print(df_suffixed.columns.tolist())

3.3 直接修改 columns 属性

# 直接赋值修改所有列名df_copy=df.copy()df_copy.columns=['A','B','C','D']print("直接修改列名:")print(df_copy.columns.tolist())# 使用列表推导式修改df_copy.columns=[col.upper()forcolindf_copy.columns]print("\n转为大写:")print(df_copy.columns.tolist())# 去除空格df_space=pd.DataFrame({' 姓名 ':[1,2],' 年龄 ':[3,4]})df_space.columns=df_space.columns.str.strip()print("\n去除列名空格:")print(df_space.columns.tolist())

4. 重命名索引

4.1 重命名索引名称

# 设置索引df_indexed=df.set_index('姓名')print("原始索引:")print(df_indexed)# 重命名索引名称df_indexed.index.name='员工姓名'print("\n重命名索引:")print(df_indexed)

4.2 重命名索引值

# 使用 rename 重命名索引值df_indexed=df.set_index('姓名')print("原始:")print(df_indexed)df_renamed_index=df_indexed.rename(index={'张三':'张先生','李四':'李先生'})print("\n重命名索引值:")print(df_renamed_index)# 使用函数重命名df_renamed_index=df_indexed.rename(index=lambdax:f'员工_{x}')print("\n使用函数:")print(df_renamed_index)

4.3 重命名多层索引

# 创建多层索引df_multi=df.set_index(['姓名','城市'])print("多层索引:")print(df_multi)# 重命名索引层级df_multi.index.names=['员工','所在地']print("\n重命名索引层级:")print(df_multi)# 使用 rename_axisdf_multi=df_multi.rename_axis(index={'员工':'姓名','所在地':'城市'})print("\n使用 rename_axis:")print(df_multi)

5. 完整示例:销售数据清洗

# 创建销售数据np.random.seed(42)sales=pd.DataFrame({'订单号':[f'ORD{i:04d}'foriinrange(1,21)],'产品名称':np.random.choice(['智能手机','笔记本电脑','平板电脑','智能手表'],20),'销售金额':np.random.randint(1000,10000,20),'销售数量':np.random.randint(1,50,20),'销售地区':np.random.choice(['华北','华东','华南','西南'],20),'销售人员':np.random.choice(['张销售','李销售','王销售'],20)})# 添加重复数据sales=pd.concat([sales,sales.iloc[0:3]],ignore_index=True)print("="*60)print("销售数据去重与重命名")print("="*60)print("\n原始数据:")print(sales.head(10))# 1. 检测重复print("\n1. 重复检测:")print(f"总行数:{len(sales)}")print(f"重复行数:{sales.duplicated().sum()}")# 2. 基于订单号去重print("\n2. 基于订单号去重:")sales_unique=sales.drop_duplicates(subset=['订单号'])print(f"去重后行数:{len(sales_unique)}")# 3. 重命名列print("\n3. 重命名列:")sales_renamed=sales_unique.rename(columns={'订单号':'order_id','产品名称':'product','销售金额':'amount','销售数量':'quantity','销售地区':'region','销售人员':'salesperson'})print(sales_renamed.columns.tolist())# 4. 添加计算列sales_renamed['unit_price']=(sales_renamed['amount']/sales_renamed['quantity']).round(2)# 5. 按销售额排序print("\n4. 销售额前5名:")print(sales_renamed.nlargest(5,'amount')[['product','amount','salesperson']])# 6. 重命名索引为订单号sales_final=sales_renamed.set_index('order_id')sales_final.index.name='Order ID'print("\n5. 最终数据:")print(sales_final.head())

6. 总结

操作方法示例
检测重复duplicated()df.duplicated()
检测重复(指定列)duplicated(subset=[...])df.duplicated(subset=['姓名'])
删除重复drop_duplicates()df.drop_duplicates()
基于列去重drop_duplicates(subset=[...])df.drop_duplicates(subset=['姓名'])
保留最后出现keep='last'df.drop_duplicates(keep='last')
删除所有重复keep=Falsedf.drop_duplicates(keep=False)
重命名列rename(columns={})df.rename(columns={'A':'a'})
批量重命名字典推导式{col: f'new_{col}' for col in df.columns}
修改 columnsdf.columns = [...]df.columns = ['A','B']
重命名索引名df.index.name = 'name'df.index.name = 'ID'
重命名索引值rename(index={})df.rename(index={'旧':'新'})
重命名索引层级rename_axis()df.rename_axis(index={'旧':'新'})

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 0:51:56

开源实践:基于Telnyx与AI构建实时智能通信系统

1. 项目概述:当AI遇上通信,一次开源协作的深度实践最近在GitHub上看到一个挺有意思的项目,叫team-telnyx/ai。光看名字,你可能会觉得这又是一个大模型应用或者AI工具库,但点进去仔细研究,会发现它的内核远不…

作者头像 李华
网站建设 2026/5/16 0:51:12

DLSS Swapper完整指南:免费开源的游戏DLSS智能管理工具

DLSS Swapper完整指南:免费开源的游戏DLSS智能管理工具 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper是一款革命性的免费开源工具,专门为PC游戏玩家设计,能够智能管理…

作者头像 李华
网站建设 2026/5/16 0:47:41

免费国产模型清单

下面给你整理了能在国内稳定使用、可通过中转接入 Claude Code 的国产免费模型,同时附接入方式和适配说明,帮你快速替换驱动👇 一、免费国产模型清单(公开 API / 兼容格式) 这些模型支持 OpenAI/Anthropic 兼容接口&a…

作者头像 李华
网站建设 2026/5/16 0:46:04

【Oracle数据库指南】第49篇:Oracle数据库安全加固与最佳实践

上一篇【第48篇】Oracle 11g在Windows下的安装与配置 下一篇【第50篇】Oracle DBA日常工作与故障处理手册 摘要 数据库安全是Oracle DBA工作中不容忽视的重要职责。默认安装的Oracle数据库存在多种安全风险:默认账户未锁定、系统权限过度授予、审计未开启等。本文系…

作者头像 李华
网站建设 2026/5/16 0:43:20

告别纯理论:手把手带你用HFSS SBR+复现一个真实的ADAS雷达测试用例

告别纯理论:手把手带你用HFSS SBR复现一个真实的ADAS雷达测试用例 在自动驾驶技术快速发展的今天,ADAS(高级驾驶辅助系统)雷达的仿真测试已成为研发过程中不可或缺的一环。传统的纯理论分析往往难以捕捉真实道路环境中的复杂电磁波…

作者头像 李华
网站建设 2026/5/16 0:42:16

通过用量看板清晰掌握团队每月大模型API成本消耗明细

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过用量看板清晰掌握团队每月大模型API成本消耗明细 对于项目管理者或团队负责人而言,在引入大模型能力后&#xff0c…

作者头像 李华