全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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 兼容,然后才能进行合并。

步骤 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  # 数据类型  # 类型转换  # 数据分析  # 第一个  # 使其  # 如何使用  # 首字母  # 这是  # 这一  # 浮点数  # 以满足  # 不需要  # 第二个 


相关文章: 道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  如何通过虚拟主机空间快速建站?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  免费网站制作appp,免费制作app哪个平台好?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  c# 在高并发场景下,委托和接口调用的性能对比  音乐网站服务器如何优化API响应速度?  创业网站制作流程,创业网站可靠吗?  如何彻底删除建站之星生成的Banner?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  如何快速搭建二级域名独立网站?  微信小程序 五星评分(包括半颗星评分)实例代码  建站之星IIS配置教程:代码生成技巧与站点搭建指南  宁波免费建站如何选择可靠模板与平台?  建站主机选择指南:服务器配置与SEO优化实战技巧  如何快速搭建个人网站并优化SEO?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  建站之星安装模板失败:服务器环境不兼容?  宿州网站制作公司兴策,安徽省低保查询网站?  公司网站制作价格怎么算,公司办个官网需要多少钱?  Python多线程使用规范_线程安全解析【教程】  已有域名如何快速搭建专属网站?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  建站之星安装步骤有哪些常见问题?  专业公司网站制作公司,用什么语言做企业网站比较好?  Python路径拼接规范_跨平台处理说明【指导】  如何通过虚拟机搭建网站?详细步骤解析  智能起名网站制作软件有哪些,制作logo的软件?  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  零服务器AI建站解决方案:快速部署与云端平台低成本实践  如何续费美橙建站之星域名及服务?  制作表格网站有哪些,线上表格怎么弄?  建站168自助建站系统:快速模板定制与SEO优化指南  用v-html解决Vue.js渲染中html标签不被解析的问题  如何选择PHP开源工具快速搭建网站?  相册网站制作软件,图片上的网址怎么复制?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  宝塔Windows建站如何避免显示默认IIS页面?  网站制作企业,网站的banner和导航栏是指什么?  如何在阿里云服务器自主搭建网站?  如何高效完成自助建站业务培训?  如何快速选择适合个人网站的云服务器配置?  黑客入侵网站服务器的常见手法有哪些?  如何在IIS7上新建站点并设置安全权限?  如何在IIS中新建站点并配置端口与IP地址?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  广州美橙建站如何快速搭建多端合一网站?  想学网站制作怎么学,建立一个网站要花费多少?  上海网站制作网站建设公司,建筑电工证网上查询系统入口? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。