讲师中心 微信公众号
AI工具推荐 视频效率加速

Pandas DataFrame:高效将多列行值整合为列表

阿敏同学_3549

阿敏同学_3549

发布时间:2025-12-02 11:02:02

|

608人浏览过

|

来源于php中文网

原创

Pandas DataFrame:高效将多列行值整合为列表

本教程详细介绍了如何使用pandas高效地将dataframe中的多列数据合并成一个新的列表值列。通过利用`iloc`进行列选择和`apply(list, axis=1)`函数,可以避免传统循环的性能瓶颈,快速实现数据结构的转换,为后续的数据分析或与其他dataframe的合并操作提供便利。

引言

在数据处理和分析中,我们经常会遇到需要将DataFrame中代表同一实体不同属性的多个列值整合到一个列表中的场景。例如,一个用户在不同时间点的多个评分、一个产品在不同维度上的特征值,或者一个事件的多个测量结果。将这些分散的列数据转换为单一的列表形式,不仅能简化数据结构,方便后续的序列操作,也为与其他数据源进行合并或构建更复杂的数据模型提供了便利。本文将详细介绍一种使用Pandas库高效、简洁地实现这一数据转换的方法,避免了传统循环带来的性能开销。

原始数据结构

假设我们有一个典型的Pandas DataFrame,其中包含一个唯一标识符id、一个名称name以及多个数值列,例如value1、value2和value3。这些数值列代表了同一实体(由id和name标识)的不同属性值。

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)

输出的原始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

目标数据结构

我们的目标是将value1、value2、value3这三列的数据,在每一行中合并成一个列表,并将这个列表存储在一个新的名为value的列中。同时,我们希望保留原始DataFrame中的标识列,即id和name。

期望的输出DataFrame结构如下:

macOS UI 自动化技能包 —— 用 Python 控制你的 Mac
macOS UI 自动化技能包 —— 用 Python 控制你的 Mac

让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限

下载
   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]

核心转换方法:使用 iloc 和 apply

Pandas库提供了强大的向量化操作,能够高效地处理DataFrame,避免了使用低效的Python循环。实现上述数据转换的关键在于结合使用DataFrame.iloc进行精确的列选择,以及DataFrame.apply()方法配合axis=1(按行应用)。

整个转换过程可以分解为以下几个步骤:

  1. 选择需要合并的数值列: 我们使用df.iloc[:, 2:]来选择从第三列(索引为2)开始的所有列。在我们的示例中,这精确地对应了value1、value2和value3。iloc是基于整数位置的索引,非常适合批量选择连续的列。

  2. 将每行的选定列值转换为列表: 对第一步中选定的子DataFrame (df.iloc[:, 2:]) 调用apply(list, axis=1)。apply()方法会将每一行的数据作为一个整体传递给指定的函数。在这里,list()函数将该行的所有值打包成一个Python列表。axis=1参数至关重要,它指示apply操作是按行进行的,而不是按列。

  3. 为新生成的Series命名: apply操作会返回一个Pandas Series,其中每个元素都是一个列表。为了方便后续与原始标识列进行合并,我们使用.rename('value')方法将其命名为value,这与我们目标列的名称一致。

  4. 与标识列进行合并: 最后,使用pd.concat()函数将原始DataFrame中的标识列(df.iloc[:, :2],即id和name)与新生成的value Series按列(axis=1)进行合并。pd.concat()是Pandas中用于连接DataFrame或Series的强大工具。

完整示例代码

下面是实现上述转换的完整Python代码:

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)

# 核心转换逻辑
# 1. 选取标识列 (id, name)。iloc[:, :2] 选择从第0列到第1列(不包括第2列)
identifier_cols = df.iloc[:, :2]

# 2. 选取需要合并的数值列 (value1, value2, value3)。iloc[:, 2:] 选择从第2列到最后一列
#    并按行转换为列表,然后将新Series命名为'value'
value_list_series = df.iloc[:, 2:].apply(list, axis=1).rename('value')

# 3. 将标识列和新的列表列按列 (axis=1) 合并
transformed_df = pd.concat([identifier_cols, value_list_series], axis=1)

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

输出结果

执行上述代码后,我们将得到以下转换后的DataFrame:

转换后的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]

注意事项与扩展

  • 列选择的灵活性:
    • 如果需要合并的列不是连续的,或者列名是已知且不连续的,可以使用列名列表进行选择,例如 df[['value1', 'value3', 'value5']]。
    • 或者使用 df.loc[:, ['value1', 'value2', 'value3']] 来精确指定列。
  • 处理非数值数据: 尽管本例中是数值数据,apply(list, axis=1)同样适用于混合数据类型。它会直接将行中的所有值按照其原始类型打包成列表。
  • 性能考量: 相比于显式地迭代DataFrame的行(例如使用df.iterrows()),apply(..., axis=1)在底层通常会利用Pandas的C语言优化,因此对于大型DataFrame,这种方法远比纯Python循环高效。
  • 移除不需要的列: 如果最终只需要name和value列,而id列不再需要,可以在转换完成后使用transformed_df.drop('id', axis=1)来删除它,或者直接通过选择需要的列来创建最终DataFrame,例如 final_df = transformed_df[['name', 'value']]。
  • 数据类型一致性: 确保要合并的列数据类型兼容,或者在合并前进行适当的类型转换,以避免列表内部数据类型混乱。

总结

通过结合iloc的精确列选择和apply(list, axis=1)的行级列表化能力,Pandas提供了一种优雅且高效的方式来将DataFrame中的多列数据聚合为一个列表值列。这种转换不仅简化了数据结构,也为后续的数据分析、数据集成以及更复杂的特征工程任务奠定了坚实的基础,同时避免了传统循环带来的性能开销,是Pandas数据处理中一项非常实用的技巧。

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

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

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

讯飞智作

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

DeepSeek

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

WorkBuddy

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

豆包大模型

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

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

相关专题

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

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

320

2025.12.04

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

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

252

2026.01.31

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

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

671

2026.04.13

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

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

3111

2023.10.31

php数据类型
php数据类型

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

554

2025.10.31

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

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

542

2026.02.12

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

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

15520

2023.12.04

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

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

1143

2024.02.23

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

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

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