0

0

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

碧海醫心

碧海醫心

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

|

568人浏览过

|

来源于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结构如下:

   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(按行应用)。

bee餐饮点餐外卖小程序
bee餐饮点餐外卖小程序

bee餐饮点餐外卖小程序是针对餐饮行业推出的一套完整的餐饮解决方案,实现了用户在线点餐下单、外卖、叫号排队、支付、配送等功能,完美的使餐饮行业更高效便捷!功能演示:1、桌号管理登录后台,左侧菜单 “桌号管理”,添加并管理你的桌号信息,添加以后在列表你将可以看到 ID 和 密钥,这两个数据用来生成桌子的二维码2、生成桌子二维码例如上面的ID为 308,密钥为 d3PiIY,那么现在去左侧菜单微信设置

下载

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

  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数据处理中一项非常实用的技巧。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

759

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

639

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

761

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

618

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1265

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

548

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

709

2023.08.11

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

65

2026.01.16

热门下载

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

精品课程

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

共4课时 | 3.8万人学习

Django 教程
Django 教程

共28课时 | 3.2万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

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

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