0

0

Python Pandas:多列数据映射至单列并进行数据框合并的策略

DDD

DDD

发布时间:2025-11-23 12:43:16

|

867人浏览过

|

来源于php中文网

原创

python pandas:多列数据映射至单列并进行数据框合并的策略

本教程详细阐述了如何利用Pandas库将一个DataFrame中的特定多列数据(如昵称)映射到另一个目标单列(如主名称),同时对其他相关列(如性别)进行简化处理,并最终与另一个DataFrame进行高效合并。文章通过具体示例代码,演示了数据转换、列清理及合并的全过程,旨在帮助读者掌握处理异构DataFrame合并的实用技巧。

在数据分析和处理中,我们经常会遇到需要整合来自不同来源或具有不同结构的数据集。一个常见的场景是,某个数据集包含主标识符(如姓名),而另一个数据集可能包含辅助标识符(如昵称),且我们希望将这些辅助标识符也作为主标识符的一部分进行统一管理。本教程将通过一个具体的案例,演示如何使用Pandas库实现这种复杂的数据转换与合并。

场景描述

假设我们有两个DataFrame,df1 包含基本的个人信息,而 df2 则在 df1 的基础上增加了 nick_name 列。我们的目标是将 df2 中的 nick_name 作为新的 name 条目,并对 sex 列进行简化,最终与 df1 合并,形成一个统一的DataFrame。

原始数据框示例:

立即学习Python免费学习笔记(深入)”;

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

import pandas as pd

# 第一个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)

# 第二个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)

预期的输出结构:

我们希望最终的DataFrame包含 df1 的所有行,以及 df2 中 nick_name 转换为 name、sex 简化的新行。

        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

注意:age 列对于 nick_name 转换而来的行将是缺失值。

核心操作步骤

为了实现上述目标,我们需要对 df2 进行一系列的预处理,使其结构与 df1 兼容,然后才能进行合并。

1. 转换 df2 的数据结构

这是整个过程的关键部分,涉及到将 nick_name 列的值转移到 name 列,并对 sex 列进行简化,同时移除不再需要的列。

a. 映射昵称到主名称列

无限画
无限画

千库网旗下AI绘画创作平台

下载

我们将 df2 中的 nick_name 列的值赋值给 name 列。这意味着原始的 name 列数据将被 nick_name 覆盖,为后续的合并做准备。

df2['name'] = df2['nick_name']

b. 简化性别信息

将 sex 列的值简化为首字母。例如,'male' 变为 'm','female' 变为 'f'。这通过Pandas的字符串访问器 .str[0] 实现。

df2['sex'] = df2['sex'].str[0]

c. 移除冗余列

在将 nick_name 映射到 name 之后,age 和 nick_name 列对于我们想要合并的新行来说是冗余的。因此,我们需要将它们从 df2 中删除。

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

经过这些转换,df2 现在只包含 name 和 sex 列,且 name 列已更新为昵称,sex 列已简化。

2. 合并 DataFrames

在 df2 经过上述转换后,它的列结构(name, sex)与 df1 的目标结构(name, age, sex)在可合并的维度上是兼容的。我们可以使用 pd.concat() 函数将 df1 和转换后的 df2 垂直堆叠起来。

为了确保合并后的索引是连续的,我们使用 ignore_index=True 参数。

df_combined = pd.concat([df1, df2], ignore_index=True)

完整示例代码

将以上所有步骤整合到一起,形成一个完整的代码示例:

import pandas as pd

# 1. 准备原始数据
data1 = {
    'name': ['smith row', 'sam smith', 'susan storm'],
    'age': [26, 30, 25],
    'sex': ['male', 'male', 'female']
}
df1 = pd.DataFrame(data1)

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("--- 原始 df1 ---")
print(df1)
print("\n--- 原始 df2 ---")
print(df2)

# 2. 转换 df2
# 2.1 映射 'nick_name' 到 'name'
df2['name'] = df2['nick_name']

# 2.2 简化 'sex' 列
df2['sex'] = df2['sex'].str[0]

# 2.3 移除冗余列
# 注意:这里为了清晰展示,使用了新的变量名 df2_transformed,
# 但在实际操作中可以直接修改 df2。
df2_transformed = df2.drop(columns=['age', 'nick_name']) 

print("\n--- 转换后的 df2_transformed ---")
print(df2_transformed)

# 3. 合并 DataFrames
df_combined = pd.concat([df1, df2_transformed], ignore_index=True)

print("\n--- 最终合并结果 df_combined ---")
print(df_combined)

输出结果:

--- 原始 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_transformed ---
     name sex
0   smity   m
1   sammy   m
2  suanny   f

--- 最终合并结果 df_combined ---
          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) 的产生:在合并 df1 和转换后的 df2 时,由于 df2_transformed 不包含 age 列,Pandas 会自动在合并后的 df_combined 中为这些新行填充 NaN 值。这通常是预期行为,但根据具体需求,你可能需要进一步处理这些缺失值(例如,填充默认值或删除)。
  • 列名对齐:pd.concat 在垂直合并时会根据列名进行对齐。如果一个DataFrame中存在另一个DataFrame中没有的列,那么在没有该列的DataFrame对应的行中,该列的值将为 NaN。
  • ignore_index=True:此参数非常重要,它会重置合并后DataFrame的索引,使其从0开始连续编号,避免了原始DataFrame索引冲突的问题。
  • 灵活性:本教程展示了一种特定的映射和转换场景。对于更复杂的动态映射或条件转换,可能需要结合 apply()、map() 或更复杂的条件逻辑。

总结

本教程提供了一种在Pandas中处理异构DataFrame合并的有效策略。通过对源DataFrame进行有针对性的列映射、数据简化和冗余列移除,我们成功地将其结构调整为与目标DataFrame兼容,并最终实现数据的无缝合并。这种方法在数据清洗、数据整合以及构建统一数据视图的场景中非常实用。掌握这些技巧将有助于你更高效地处理和分析复杂的数据集。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

80

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

33

2026.01.31

mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

210

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

324

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

293

2025.06.11

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

178

2025.08.07

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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