讲师中心 微信公众号

工具推荐

视频效率加速
Seko
Seko

AI短剧一键生成成片

updream

一键生成高质量推广成片

剧云
剧云

中文短剧剧本制作平台

AniShort
AniShort

AI短剧协同制作平台

将DataFrame行转换为键值对列表的教程

风明大大_7720

风明大大_7720

发布时间:2025-12-07 16:50:02

|

778人浏览过

|

来源于php中文网

原创

将DataFrame行转换为键值对列表的教程

本文详细介绍了如何利用pandas库高效地将dataframe中的多列数值数据聚合为以特定列为键、以数值列表为值的结构。通过避免低效的循环操作,本教程展示了如何结合使用`iloc`、`apply`和`concat`函数,将源dataframe的指定值列转换成一个包含列表的新列,并与原始键列进行合并,从而实现数据结构的优化,便于后续的数据处理和连接操作。

在数据分析和处理中,我们经常会遇到需要将DataFrame中分散在多列的数值数据整合到单个列表中,并与某个标识列(键)关联起来的场景。例如,一个DataFrame可能包含一个ID列、一个名称列以及多个表示不同测量或属性的数值列。为了方便后续的数据合并或简化数据结构,我们可能需要将这些数值列聚合成一个列表,并以名称列作为其唯一标识。

原始数据结构示例

假设我们有一个Pandas DataFrame,其结构如下:

   id name  value1  value2  value3
0   1  AAA     1.0     1.5     1.8
1   2  BBB     2.0     2.3     2.5
2   3  CCC     3.0     3.6     3.7

在这个DataFrame中,id和name是标识列,而value1、value2和value3是需要聚合的数值列。

目标数据结构

我们希望将上述DataFrame转换为以下形式,其中name作为键,而value列包含一个由原始value1、value2、value3组成的列表:

  name          value
0  AAA  [1.0, 1.5, 1.8]
1  BBB  [2.0, 2.3, 2.5]
2  CCC  [3.0, 3.6, 3.7]

更理想的情况是保留原始的id列,同时将值列聚合:

   id name            value
0   1  AAA  [1.0, 1.5, 1.8]
1   2  BBB  [2.0, 2.3, 2.5]
3   3  CCC  [3.0, 3.6, 3.7]

高效的Pandas解决方案

为了避免使用效率低下的循环语句,我们可以利用Pandas提供的强大向量化操作。核心思想是选择需要聚合的数值列,对每一行应用list函数,然后将生成的新列与原始的标识列合并。

以下是实现这一转换的Python代码:

Biopython
Biopython

全面的分子生物学工具集。适用于序列操作、文件解析(FASTA/GenBank/PDB)、系统发育分析,以及通过 Bio.Entrez 以编程方式访问 NCBI/

下载
import pandas as pd

# 示例DataFrame
data = {
    'id': [1, 2, 3],
    'name': ['AAA', 'BBB', 'CCC'],
    'value1': [1.0, 2.0, 3.0],
    'value2': [1.5, 2.3, 3.6],
    'value3': [1.8, 2.5, 3.7]
}
df = pd.DataFrame(data)

print("原始DataFrame:")
print(df)
print("-" * 30)

# 转换操作
# 1. 选择前两列(id和name)作为标识列
id_name_cols = df.iloc[:, :2]

# 2. 选择从第三列开始的所有数值列
value_cols = df.iloc[:, 2:]

# 3. 对数值列的每一行应用list函数,将其转换为一个列表
#    axis=1 表示按行操作
#    .rename('value') 将新生成的Series命名为'value'
list_values_series = value_cols.apply(list, axis=1).rename('value')

# 4. 使用pd.concat将标识列和新生成的列表列合并
transformed_df = pd.concat([id_name_cols, list_values_series], axis=1)

print("转换后的DataFrame:")
print(transformed_df)

代码输出:

原始DataFrame:
   id name  value1  value2  value3
0   1  AAA     1.0     1.5     1.8
1   2  BBB     2.0     2.3     2.5
2   3  CCC     3.0     3.6     3.7
------------------------------
转换后的DataFrame:
   id name            value
0   1  AAA  [1.0, 1.5, 1.8]
1   2  BBB  [2.0, 2.3, 2.5]
2   3  CCC  [3.0, 3.6, 3.7]

代码解析

  1. df.iloc[:, :2]: 这部分代码使用基于整数位置的索引(iloc)来选择DataFrame中的列。

    • : 表示选择所有行。
    • :2 表示选择从索引0开始到索引2之前(不包括2)的列,即第一列和第二列(在本例中是id和name)。
    • 这会返回一个包含id和name列的新DataFrame。
  2. df.iloc[:, 2:]: 同样使用iloc,这部分代码选择从索引2开始到末尾的所有列,即value1、value2和value3。这会返回一个包含所有数值列的新DataFrame。

  3. .apply(list, axis=1):

    • apply() 方法用于在DataFrame的行或列上应用一个函数。
    • list 是Python内置的函数,它将一个可迭代对象转换为列表。
    • axis=1 参数至关重要,它指示apply函数按行操作。这意味着list函数将应用于value_cols DataFrame的每一行,将该行中的所有元素收集到一个列表中。
    • 此操作的结果是一个Pandas Series,其中每个元素都是一个列表。
  4. .rename('value'): apply操作返回的Series默认没有一个有意义的名称。rename('value')方法将其名称设置为'value',这正是我们希望新列的名称。

  5. pd.concat([id_name_cols, list_values_series], axis=1):

    • pd.concat() 函数用于沿着特定轴连接Pandas对象。
    • [id_name_cols, list_values_series] 是一个包含要连接的DataFrame和Series的列表。
    • axis=1 参数指示concat函数按列连接。它会将id_name_cols DataFrame和list_values_series Series横向拼接起来,形成最终的DataFrame。

总结与注意事项

  • 避免循环: 这种方法充分利用了Pandas的向量化操作,避免了显式的Python循环,从而在处理大型DataFrame时提供了显著的性能优势。
  • 灵活性: iloc的强大之处在于可以根据列的整数位置灵活选择任意范围的列。如果列名是固定的,也可以使用df[['col1', 'col2']]和df.drop(['col1', 'col2'], axis=1)等方法。
  • 数据类型: apply(list)会直接将原始列中的数据类型保留在列表中。如果原始列包含不同类型的数据,列表也将包含混合类型。
  • 后续应用: 这种转换后的数据结构非常适合于后续的数据合并(例如,通过name列与其他DataFrame进行merge操作),或者在需要将一组相关值作为一个整体进行处理时。

通过掌握这种高效的数据重塑技巧,您将能够更有效地处理和准备Pandas DataFrame中的数据,为后续的分析工作打下坚实的基础。

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

函子Zion

一款支持AI搭建、可视化编辑和多端发布的全栈无代码开发平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

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

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

360

2025.12.04

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

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

292

2026.01.31

Python数据分析与Pandas高级实战
Python数据分析与Pandas高级实战

本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

931

2026.04.13

数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3511

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

574

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

602

2026.02.12

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2901

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

416

2025.12.22

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

20

2026.11.12

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn