Pandas数据重塑:多列映射、数据转换与DataFrame合并实践


Pandas数据重塑:多列映射、数据转换与DataFrame合并实践

本教程详细介绍了如何使用pandas库将一个dataframe中的多列数据(如昵称)映射到目标dataframe的单列中,并进行其他必要的列数据转换(如性别缩写),最终与另一个dataframe进行合并。通过实际代码示例,您将学习如何灵活地重塑和整合不同结构的数据,以满足特定的分析和报告需求。

在数据处理和分析中,我们经常会遇到需要整合来自不同数据源或结构各异的DataFrame的情况。一个常见的场景是,我们希望将一个DataFrame中的特定信息(可能分散在多列中)统一映射到另一个DataFrame的某一列,同时可能还需要对其他列进行格式转换,最终将处理后的数据与现有数据合并。本文将通过一个具体的示例,详细讲解如何使用Pandas实现这一过程。

场景描述

假设我们有两个DataFrame,df1 包含基本的个人信息,而 df2 除了基本信息外,还包含一个 nick_name 列。我们的目标是创建一个新的DataFrame,其中包含 df1 的所有行,以及 df2 中 nick_name 作为 name、sex 缩写后的行。

初始数据示例:

首先,我们定义两个初始DataFrame:

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)
# Output:
#          name  age     sex
# 0   smith row   26    male
# 1   sam smith   30    male
# 2  susan storm   25  female

# 第二个DataFrame
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("\ndf2:")
print(df2)
# Output:
#          name  age     sex nick_name
# 0   smith row   26    male     smity
# 1   sam smith   30    male     sammy
# 2  susan storm   25  female    suanny

我们期望的输出结果是 df1 的内容,加上 df2 中 nick_name 作为 name,sex 缩写(如 'm', 'f')后的新行,而 age 列则因 nick_name 行没有对应年龄而显示为 NaN。

实现步骤

要达到预期的结果,我们需要对 df2 进行一系列的预处理操作,使其结构与 df1 兼容,然后才能进行合并。

NoCode NoCode

美团推出的零代码应用生成平台

NoCode 180 查看详情 NoCode

步骤 1:重塑 df2 以匹配目标结构

这一步是核心,涉及到列的替换、转换和删除。

  1. 将 nick_name 列的值赋给 name 列: 这是将多列信息(这里是 nick_name)映射到目标单列(name)的关键一步。通过直接赋值,我们将 df2 中 nick_name 列的数据“移动”到了 name 列。

    df2_processed = df2.copy() # 创建副本以避免修改原始df2
    df2_processed['name'] = df2_processed['nick_name']
  2. 转换 sex 列: 根据需求,我们将 sex 列的值转换为其首字母(例如 'male' 变为 'm','female' 变为 'f')。

    df2_processed['sex'] = df2_processed['sex'].str[0]
  3. 删除不需要的列: 为了使 df2_processed 的列结构与 df1 保持一致,我们需要删除 age 和 nick_name 列。age 列被删除后,在后续合并时,对应 nick_name 行的 age 值将自动填充为 NaN,这符合我们的预期。

    df2_processed = df2_processed.drop(columns=['age', 'nick_name'])

将上述操作整合起来:

# 对df2进行处理,使其结构与df1兼容
df2_processed = df2.copy()
df2_processed['name'] = df2_processed['nick_name']  # 将nick_name映射到name列
df2_processed['sex'] = df2_processed['sex'].str[0]  # 将sex转换为首字母
df2_processed = df2_processed.drop(columns=['age', 'nick_name']) # 删除age和nick_name列

print("\ndf2_processed (重塑后):")
print(df2_processed)
# Output:
#        name sex
# 0     smity   m
# 1     sammy   m
# 2    suanny   f

可以看到,df2_processed 现在只有 name 和 sex 两列,并且数据已经按照我们的要求进行了转换。

步骤 2:合并 DataFrames

现在 df1 和 df2_processed 具有兼容的列结构,我们可以使用 pd.concat() 函数将它们按行合并。ignore_index=True 参数将重置索引,确保合并后的DataFrame有一个连续的新索引。

# 合并df1和处理后的df2
final_df = pd.concat([df1, df2_processed], ignore_index=True)

print("\n最终合并结果:")
print(final_df)
# Output:
#           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       f

结果分析与注意事项

  • NaN 值的产生: 在最终的 final_df 中,由 df2_processed 贡献的行在 age 列显示为 NaN。这是因为 df2_processed 在合并前已经移除了 age 列。当 pd.concat 遇到不匹配的列时,会用 NaN 填充缺失值。这通常是预期行为,但如果需要,可以进一步处理这些 NaN 值(例如,填充默认值或删除)。
  • 数据类型: 由于 age 列现在包含了浮点数 NaN,整个 age 列的数据类型可能从整数变为浮点数(例如 int64 变为 float64)。在进行后续计算时,请注意这一点。
  • 列顺序: pd.concat 会保留第一个DataFrame的列顺序,并根据需要添加其他DataFrame的列。在本例中,df1 和 df2_processed 的列名和顺序都已匹配,因此没有问题。
  • “动态映射”的理解: 原始问题中提到“动态映射”。在本教程的场景中,它指的是通过编程方式灵活地修改和重塑DataFrame的结构,以适应特定的合并需求。这通常涉及列的赋值、转换函数(如 .str[0])和列的删除。

总结

本教程展示了如何利用Pandas的强大功能来重塑和合并DataFrames。关键在于理解如何通过列赋值、数据类型转换和列删除等操作,使不同结构的DataFrame在合并前达到兼容状态。这种方法在处理复杂的数据整合任务时非常实用,能够帮助您灵活地管理和组织数据,以满足多样化的数据分析需求。熟练掌握这些技巧,将大大提升您在数据预处理阶段的效率。

以上就是Pandas数据重塑:多列映射、数据转换与DataFrame合并实践的详细内容,更多请关注其它相关文章!


# 使其  # 免费seo优化诊断分类  # 金牛网站优化  # 相关文章  # 不需要  # 以满足  # 浮点数  # 这一  # 这是  # 首字母  # 如何使用  # 第一个  # 业务推广有哪些网站推荐  # 哪个商城网站建设好  # 抖音足球营销怎么做推广  # 宜城双语网站建设  # 罗源平台推广营销公司招聘  # 河北定州seo  # 短息群发营销推广有用吗  # 石楼网站推广咨询 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: HTML Canvas文本样式定制指南:解决外部字体加载与应用难题  学习通网页版个人登录_学习通网页版个人账户登录入口  TikTok网页版入口快速访问 TikTok官网账号登录方法  windows10怎么关闭自动安装应用_windows10禁止推广应用下载  TikTok视频播放不流畅怎么办 TikTok视频播放优化方法  冬季去哪个城市旅游更有可能观测到极光  Cassandra中复合主键、二级索引与ORDER BY排序的限制与解决方案  铁路12306入口 铁路12306官网版入口登录网址  PHP utf8_encode 字符编码转换疑难解析与最佳实践  qq音乐官方网站入口_qq音乐在线听歌网页版链接  WooCommerce 购物车:始终显示所有交叉销售商品  自定义你的VS Code状态栏,监控关键信息  AO3中文入口稳定分享_AO3官网HTTPS看文详解  《真我》申请退款方法  《合金装备4》有望推出重制版!制作人发话了  百度输入法在AutoCAD中无法输入中文怎么办_百度输入法CAD输入异常解决方法  VS Code中的Tailwind CSS IntelliSense插件使用技巧  漫蛙漫画官方网站使用_漫蛙manwa网页版在线入口教程  小米手机屏幕失灵乱跳怎么办 屏幕触控问题自检与临时解决方法【应急】  百度网盘如何设置上传限额  火柴人战争网页版在线玩  《全民k歌》网页版最新登录入口一览  顺丰快递收费标准查询_如何查看顺丰最新收费价格  如何在Python中安全地将环境变量转换为整数并满足Mypy类型检查  天堂漫画网页版在线阅读 天堂漫画手机版入口  sublime如何自定义文件类型图标_AFileIcon插件的主题切换与个性化配置  《王者荣耀世界》英雄获取攻略  PHP安全加载非公开目录图片与动态内容类型处理指南  mysql数据库索引类型有哪些_mysql索引类型解析  教育查询官方网站入口 教育个人档案查询免费官网  2025SNH48年度青春盛典门票价格及购买方式  盲鳗善于分泌黏液猜猜主要用来做什么  微信朋友圈怎么设置三天可见 微信朋友圈设置指定天数可见步骤【教程】  优化Google Charts Gauge:在数据库无数据时显示默认值  J*aScript二进制处理_ArrayBuffer与Blob  《飞猪旅行》购买汽车票方法  mysql导入sql文件能分批导入吗_mysql分批次导入大sql文件的实用技巧  Python中对象引用与链表属性赋值的机制解析  如何使用 composer 和 aop-php 实现 AOP 编程?  《随手记》备份数据方法  淘口令快速解析技巧  win11如何开启单声道音频 Win11为听障用户合并左右声道【辅助】  汽水音乐网页版登录 汽水音乐网页端官方入口  mysql镜像配置如何恢复数据_mysql镜像配置数据恢复详细流程  抖音网页版地址直接进入_抖音网页版在线观看入口  mysql中外键约束如何使用_mysql FOREIGN KEY操作  《下一站江湖2》大雪山加入方法  《雅迪智行》用手机开锁方法  解决SQLAlchemy模型跨文件关联的Linter兼容性指南  MySQL多重JOIN技巧:高效关联同一表获取多角色信息 

 2025-11-24

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.