python中如何把dataframe转换为列表及其性能比较

news/2025/3/12 15:46:21/

在Python中,将DataFrame转换为列表常用的方法有以下几种:

### 1. 使用values属性

先通过`values`属性将DataFrame转换为NumPy数组,然后再调用`tolist()`方法将数组转换为列表。这是一种简单直接的方式,适用于快速将整个DataFrame转换为嵌套列表,每个内部列表代表DataFrame中的一行数据。

```python

import pandas as pd

# 创建一个示例DataFrame

df = pd.DataFrame({

    '名字': ['小明', '小红', '小张'],

    '年龄': [18, 20, 19],

    '成绩': [85, 92, 88]

})

# 使用values属性转换为列表

list_from_values = df.values.tolist()

print(list_from_values)

```

### 2. 使用to_numpy()方法

从pandas 0.24版本开始可用,先使用`to_numpy()`方法将DataFrame转换为NumPy数组,再通过`tolist()`方法转换为列表。该方法比`values`属性更加灵活,在处理混合类型数据时,能更好地控制输出的数据类型。

```python

import pandas as pd
# 创建一个示例DataFrame
df = pd.DataFrame({
   
'名字': ['小明', '小红', '小张'],
   
'年龄': [18, 20, 19],
   
'成绩': [85, 92, 88]
})

# 使用to_numpy()方法转换为列表
print('转换成numpy数组:')
print(df.to_numpy())
list_from_numpy = df.to_numpy().tolist()

print(list_from_numpy)

```

### 3. 使用列表推导式

通过遍历DataFrame的行或列,将每一行或每一列的数据转换为列表。这种方法的优点是代码简洁,并且可以在转换过程中方便地对数据进行额外的处理,例如筛选、转换数据格式等。

```python

import pandas as pd

# 创建一个示例DataFrame

df = pd.DataFrame({

    '名字': ['小明', '小红', '小张'],

    '年龄': [18, 20, 19],

    '成绩': [85, 92, 88]

})

# 使用列表推导式转换为列表

list_from_comprehension = [list(row) for _, row in df.iterrows()]

print(list_from_comprehension)

```

**性能比较**:

在处理较小规模的DataFrame时,`values`属性和`to_numpy()`方法的性能相近,都相对高效,因为它们底层都是基于NumPy数组进行操作,并且转换过程较为直接。而列表推导式由于涉及到Python层面的循环迭代,相比前两者在时间上会稍慢一些。

在处理大规模DataFrame时,`values`属性和`to_numpy()`方法通常依然表现较好。但如果DataFrame非常大,内存可能会成为瓶颈。此时列表推导式可以通过逐行处理,在一定程度上减少内存的占用压力,不过整体处理时间可能会更长。

```python

import pandas as pd
import timeit

# 创建一个大规模的 DataFrame
data = {
   
'col1': list(range(10000)),
   
'col2': list(range(10000, 20000)),
   
'col3': list(range(20000, 30000))
}
df = pd.DataFrame(data)


# 定义使用 values.tolist() 的转换函数
def convert_with_values():
   
return df.values.tolist()

# 定义使用 to_numpy().tolist() 的转换函数
def convert_with_to_numpy():
   
return df.to_numpy().tolist()

# 定义使用列表推导式的转换函数
def convert_with_list_comprehension():
   
return [list(row) for _, row in df.iterrows()]

# 分别测试三种方法的性能
time_values = timeit.timeit(convert_with_values, number=100)
time_to_numpy = timeit.timeit(convert_with_to_numpy,
number=100)
time_list_comprehension = timeit.timeit(convert_with_list_comprehension,
number=100)

print(f"使用 values.tolist() 方法花费的时间: {time_values} ")
print(f"使用 to_numpy().tolist() 方法花费的时间: {time_to_numpy} ")
print(f"使用列表推导式方法花费的时间: {time_list_comprehension} ")

```

如果对性能要求极高,并且数据量很大,可以考虑使用诸如Dask这样的库进行并行处理,它可以将大规模数据分割成多个小的分区,并行地进行转换操作,从而提高整体的处理效率。

综上所述,如果只是简单地将DataFrame转换为列表且对数据处理过程没有特殊要求,优先考虑使用`values`属性或`to_numpy()`方法;如果需要在转换过程中灵活地对数据进行额外处理,则列表推导式会是更好的选择。


http://www.ppmy.cn/news/1578352.html

相关文章

三维仿射变换矩阵

三维仿射变换矩阵 平移变换缩放变换旋转变换绕x、y、z单个轴旋转的变换绕任意轴旋转 三维仿射变换矩阵有 3 4 、 4 4 3\times4、4\times4 34、44两种写法,都是施加到三维点的齐次式上, 4 4 4\times4 44的仿射变换矩阵是在 3 4 3\times4 34的矩阵后追…

Node.js和Vue CLI 安装指南(Windows 系统)

Node.js 与 Vue CLI 安装指南(Windows 系统) 一、Node.js 安装步骤 1. 安装包获取 官网下载:Node.js 官网推荐选择 LTS 版本(长期支持版)双击运行安装包: 2. 安装向导配置 点击 "Next" 进入…

本周行情——20250308

本周A股行情总结及主线阶段分析 (2025年3月3日-3月7日) 一、整体行情回顾 市场情绪: 前半周(3月3日-5日):市场情绪持续回暖,涨停家数从66家增至115家,主线板块(机器人、…

Docker入门篇1:搜索镜像、拉取镜像、查看本地镜像列表、删除本地镜像

大家好我是木木,在当今快速发展的云计算与云原生时代,容器化技术蓬勃兴起,Docker 作为实现容器化的主流工具之一,为开发者和运维人员带来了极大的便捷 。下面我们一起开始入门第一篇:搜索镜像、拉取镜像、查看本地镜像…

NO.29十六届蓝桥杯备战|string九道练习|reverse|翻转|回文(C++)

P5015 [NOIP 2018 普及组] 标题统计 - 洛谷 #include <bits/stdc.h> using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);string s;getline(cin, s);int sz s.size();int cnt 0;for (int i 0; i < sz; i){if (isspace(s[i]))continue…

【单片机】嵌入式系统的硬件与软件特性

嵌入式系统的软件结构 嵌入式系统的软件结构一般分为 不带操作系统&#xff08;Bare Metal&#xff09; 和 带操作系统&#xff08;RTOS / Linux&#xff09; 两种。不同的软件架构适用于不同的应用场景&#xff0c;如 简单控制系统、实时控制系统、物联网、工业自动化等。 嵌…

QT显示网页控件QAxWidget、QWebEngineView及区别

一.QT种显示网页控件QAxWidget 1.介绍 QAxWidget 属于 QtAxContainer 模块&#xff0c;ActiveX 是微软提出的一种组件对象模型&#xff08;COM&#xff09;技术&#xff0c;允许不同的软件组件在 Windows 操作系统上进行交互和集成。QAxWidget 为开发者提供了在 Qt 应用程序中…

DeepSeek-进阶版部署(Linux+GPU)

前面几个小节讲解的Win和Linux部署DeepSeek的比较简单的方法&#xff0c;而且采用的模型也是最小的&#xff0c;作为测试体验使用是没问题的。如果要在生产环境使用还是需要用到GPU来实现&#xff0c;下面我将以有一台带上GPU显卡的Linux机器来部署DeepSeek。这里还只是先体验单…