新闻中心
使用Pandas高效进行DataFrame多列映射与合并

本文详细介绍了如何使用Pandas库将多个DataFrame的列数据进行转换、映射和合并,以实现复杂的数据重构需求。教程涵盖了列赋值、字符串操作、列删除以及DataFrame垂直拼接等核心操作,旨在帮助读者高效地整合不同结构的数据,并处理合并过程中可能出现的缺失值。
在数据分析和处理过程中,我们经常会遇到需要从不同来源或不同结构的DataFrame中提取、转换并合并数据的情况。例如,一个DataFrame可能包含主信息,而另一个DataFrame则包含补充信息,我们需要将这些补充信息映射到主信息的特定列,并最终整合到一起。本教程将通过一个具体的示例,详细讲解如何利用Pandas库实现这种多列映射与DataFrame合并的操作。
1. 准备初始数据
首先,我们创建两个示例DataFrame,分别命名为 df1 和 df2,它们代表了我们即将操作的原始数据。
import pandas as pd
import numpy as np
# 第一个DataFrame
data1 = {
'name': ['smith row', 'sam smith', 'susan storm'],
'age': [26, 30, 25],
'sex': ['male', 'male', 'female']
}
df1 = pd.DataFrame(data1)
print("df1 (原始数据):")
print(df1)
print("-" * 30)
# 第二个DataFrame,包含额外的'nick_name'列
data2 = {
'name': ['smith row', 'sam smith', 'susan storm'],
'age': [26, 30, 25],
'sex': ['male', 'male', 'female'],
'nick_name': ['smity', 'sammy', 'suanny']
}
df2 = pd.DataFrame(data2)
print("df2 (包含昵称的补充数据):")
print(df2)
print("-" * 30)输出示例:
PictoGraphic
AI驱动的矢量插图库和插图生成平台
133
查看详情
df1 (原始数据):
name age sex
0 smith row 26 male
1 sam smith 30 male
2 susan storm 25 female
------------------------------
df2 (包含昵称的补充数据):
name age sex nick_name
0 smith row 26 male smity
1 sam smith 30 male sammy
2 susan storm 25 female suanny
---------
---------------------我们的目标是将 df2 中的 nick_name 列作为新的 name 信息,同时将 sex 列简化为首字母,并最终与 df1 合并,形成一个统一的DataFrame。
2. 对第二个DataFrame进行数据转换与列映射
为了达到预期的合并效果,我们需要对 df2 进行一系列的转换操作。这些操作包括:
- 将 nick_name 列的值赋给 name 列。
- 将 sex 列的值转换为其首字母。
- 删除不再需要的 age 和 nick_name 列。
# 步骤1: 将'nick_name'列的值赋给'name'列
df2_transformed = df2.copy() # 创建副本以避免修改原始df2
df2_transformed['name'] = df2_transformed['nick_name']
# 步骤2: 将'sex'列的值转换为其首字母
# 使用.str[0]可以方便地提取字符串的第一个字符
df2_transformed['sex'] = df2_transformed['sex'].str[0]
# 步骤3: 删除不再需要的'age'和'nick_name'列
df2_transformed = df2_transformed.drop(columns=['age', 'nick_name'])
print("df2_transformed (转换后的数据):")
print(df2_transformed)
print("-" * 30)输出示例:
df2_transformed (转换后的数据):
name sex
0 smity m
1 sammy m
2 suanny f
------------------------------经过这些转换,df2_transformed 现在只包含 name 和 sex 列,并且数据格式符合我们合并的要求。
3. 合并DataFrame
现在,我们可以使用 pd.concat() 函数将 df1 和转换后的 df2_transformed 进行垂直合并。
# 使用pd.concat()进行垂直合并
# ignore_index=True 会重置合并后的索引,使其从0开始连续编号
final_df = pd.concat([df1, df2_transformed], ignore_index=True)
print("final_df (最终合并结果):")
print(final_df)输出示例:
final_df (最终合并结果):
name age sex
0 smith row 26.0 male
1 sam smith 30.0 male
2 susan storm 25.0 female
3 smity NaN m
4 sammy NaN m
5 suanny NaN f4. 结果分析与注意事项
观察最终合并结果 final_df,我们可以看到:
- df1 的所有行都被完整保留。
- df2_transformed 的行被追加到了 df1 的下方。
- 由于 df2_transformed 在合并前已经移除了 age 列,因此在合并后的 final_df 中,对应 df2_transformed 来源的行在 age 列显示为 NaN(Not a Number),表示缺失值。这是 pd.concat() 处理列不匹配时的默认行为。
- sex 列的数据类型在合并后可能会因为 male/female 和 m/f 的混合而变为 object 类型,这是符合预期的。
注意事项与最佳实践:
- 列名一致性: 在进行 pd.concat() 垂直合并时,如果两个DataFrame的列名不完全一致,Pandas会默认进行外连接(union),即保留所有唯一的列名,并在缺失的列位置填充 NaN。因此,在合并前确保目标列名一致是关键。
- 数据类型: 合并操作可能会导致列的数据类型发生变化,尤其是在存在 NaN 的情况下,整数列可能会被转换为浮点数类型。在合并后,如果需要,可能需要进行数据类型转换(例如,使用 df['age'].fillna(0).astype(int) 来填充 NaN 并转换为整数)。
- 缺失值处理: 合并后产生的 NaN 值通常需要进一步处理,例如使用 fillna() 填充默认值,或使用 dropna() 删除含有 NaN 的行。具体处理方法取决于业务需求。
- ignore_index=True: 这个参数在垂直合并时非常有用,它会生成一个新的、连续的索引,避免了原始DataFrame索引重复或混乱的问题。
- 动态映射: 虽然本示例是硬编码的列操作,但在实际应用中,如果需要处理大量或结构相似的DataFrame,可以考虑编写函数或使用循环来动态执行列的映射、转换和删除操作,从而提高代码的复用性和灵活性。
总结
本教程详细演示了如何利用Pandas库对DataFrame进行多步操作,包括列的赋值、字符串处理、列的删除以及最终的DataFrame垂直合并。通过这些技术,我们可以有效地重构和整合不同来源的数据,以满足复杂的数据分析需求。理解这些核心操作及其对数据结构和数据类型的影响,是进行高效数据清洗和预处理的关键。
以上就是使用Pandas高效进行DataFrame多列映射与合并的详细内容,更多请关注其它相关文章!
# 数据包
# 微商精准推广营销引流
# 洛阳网站建设代理招聘
# 网络营销推广方法包括
# 抖音营销推广赚钱吗
# 广州网站建设协议模板
# 漳州网站建设要素有哪些
# 比网站推广好的方法
# 公司网站推广金手指10
# 浏阳360营销推广公司
# 深圳外贸网站海外推广
# 编码
# 原始数据
# 为其
# 第二个
# 第一个
# 如何使用
# 这是
# 重构
# 数据结构
# 转换为
# 数据清洗
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性
如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧
windows10怎么查看硬盘序列号_windows10硬盘id查询命令
qq游戏免费畅玩入口_qq游戏电脑版快速启动
win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】
excel怎么制作工资条 excel快速生成工资条的方法
打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门
漫蛙网页登录入口 漫蛙漫画官方授权网址
谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法
处理动态列数据:J*a ArrayList的正确初始化与字符累加教程
mcjs网页版流畅运行 mcjs低配电脑畅玩入口
Win11怎么关闭触摸屏_Windows 11禁用HID符合标准触摸屏
谷歌邮箱注册显示错误Gmail服务器异常与延迟处理
yandex入口引擎手机版 yandex安卓版下载入口
顺丰快件物流信息 官方网站查询入口
俄罗斯Yandex免登录入口_Yandex搜索引擎官网一键直达
b站怎么取消点赞_b站点赞取消操作方法
QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台
Go Martini框架:动态服务解码后的图片内容
C++如何实现线程池_C++11手动实现一个简单的固定大小线程池
CSS布局:解决全屏元素100%尺寸与外边距导致的页面溢出问题
c++ dfs和bfs代码 c++深度广度优先搜索算法
汽水音乐在线解析 汽水音乐在线解析入口
UC浏览器官网入口2025最新 UC浏览器网页版正式地址
css卡片内容溢出如何处理_使用overflow隐藏或scroll显示内容
企业名称高精度匹配:N-gram方法在结构相似性分析中的应用
fishbowl官网免费版 fishbowl养鱼网站入口
excel如何生成目录 excel一键生成工作表目录超链接
AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看
微博网页版怎么开启两步验证_微博网页版账号安全两步验证设置方法
必由学官网首页入口 必由学教师网页版登录指南
Descript怎样用AI剪辑自动去噪_Descript用AI剪辑自动去噪【自动降噪】
uc浏览器网页版入口 uc浏览器网页版最新网址
在J*aScript中复现SciPy的B样条拟合与求值:关键考量
Django通过AJAX异步上传图片并保存至模型的完整指南
天眼查怎么看公司融资情况 天眼查企业融资历史查询步骤【攻略】
淘宝网网页版登录入口 淘宝官方网页版快捷登录
sublime怎么设置启动时打开的窗口_sublime会话管理与热退出
小红书网页版入口链接分享 小红书官网直接进
抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧
Safari浏览器输入栏卡顿如何解决 Safari搜索建议与缓存清理
2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享
sublime怎么格式化代码_sublime代码美化与一键排版插件配置
腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程
mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤
漫蛙2正版漫画站 漫蛙2网页版快速访问入口
vivo云服务网页版登录 怎么登录vivo云服务网页版
Excel Power Pivot如何处理XML数据源 构建高级数据模型
生成rdflib自定义SPARQL函数:参数匹配与实践指南
将HTML动态表格多行数据保存到Google Sheet的教程


2025-11-23
浏览次数:次
返回列表
---------------------