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

心靈之曲
发布: 2025-11-24 13:58:01
原创
306人浏览过

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

AI TransPDF
AI TransPDF

高效准确地将PDF文档翻译成多种语言的AI智能PDF文档翻译工具

AI TransPDF 231
查看详情 AI TransPDF

步骤 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合并实践的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号