Skip to content

如何将 Pandas DataFrame 转换为 List?

Updated on

在数据清洗、导出、特征工程以及为 API 准备数据时,把 Pandas DataFrame 转成 Python list 是一个非常常见的步骤。虽然 tolist() 仍然很常用,但 Pandas 已经提供了更明确、更现代的方式——比如 to_numpy()to_dict()——在可读性和性能上通常更好。

本更新指南会覆盖:

  • 将整个 DataFrame 转换为 list of lists
  • 单列 转换为 list
  • 创建 嵌套列表或元组
  • 更现代的结构,比如 list of dicts(常用于 JSON / API 输出)

⚡ 彩蛋:立即可视化你的数据

想在不写绘图代码的情况下,直接可视化 DataFrame?

PyGWalker 是一个开源 Python 工具,可以在 Jupyter Notebook 中,把你的 Pandas 或 Polars DataFrame 变成 类似 Tableau 的交互式界面

只需安装并运行:

pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)
Run in Kaggle (opens in a new tab)Run in Google Colab (opens in a new tab)⭐ GitHub (opens in a new tab)

🧩 1. 将整个 DataFrame 转成 List(List of Lists)

最常见的做法是把每一行都变成一个 list。

✔ 2025 推荐写法:df.to_numpy().tolist()

import pandas as pd
 
df = pd.DataFrame({'numbers': [1, 2, 3], 'letters': ['a', 'b', 'c']})
list_from_df = df.to_numpy().tolist()
print(list_from_df)

输出:

[[1, 'a'], [2, 'b'], [3, 'c']]

为什么优先使用 to_numpy() 而不是 df.values

  • df.values 更老,遇到一些复杂 dtypes 时行为可能不一致
  • to_numpy() 是 Pandas 推荐的现代、显式方法

🧩 2. 将单个列转换为 List

使用 Series.tolist() —— 简洁且高效。

list_from_column = df["numbers"].tolist()
print(list_from_column)

输出:

[1, 2, 3]

🧩 3. 创建嵌套 List 或元组(List of Tuples)

如果你需要元组(例如用于 SQL 批量插入或者某些 API 入参):

nested_list = [tuple(row) for row in df.to_numpy()]
print(nested_list)

输出:

[(1, 'a'), (2, 'b'), (3, 'c')]

使用 to_records() 的替代写法:

nested_list = [tuple(x) for x in df.to_records(index=False)]

⭐ 加分:转换为字典列表(JSON / API 最常用)

很多实际应用都期望拿到类似 JSON 的对象结构。

list_of_dicts = df.to_dict(orient="records")
print(list_of_dicts)

输出:

[
  {"numbers": 1, "letters": "a"},
  {"numbers": 2, "letters": "b"},
  {"numbers": 3, "letters": "c"}
]

这种格式在现代场景中非常常见,用于:

  • APIs
  • 机器学习特征导出
  • 写入 JSON 文件
  • 在系统之间传递结构化数据

📌 快速示例汇总

# list of lists
df.to_numpy().tolist()
 
# 使用 df.values(老写法)
df.values.tolist()
 
# 单列 → list
df["numbers"].tolist()
 
# list of tuples
[tuple(x) for x in df.to_numpy()]
 
# 字典列表(JSON-ready)
df.to_dict("records")

✅ 总结

把 Pandas DataFrame 转成 list 本身并不难,更关键是根据你的目标选择合适的结构

目标推荐方法
每行表示为一个 listdf.to_numpy().tolist()
单列转换为 listdf[col].tolist()
使用元组(如 SQL / 某些 API)[tuple(x) for x in df.to_numpy()]
转成 JSON 友好的对象结构df.to_dict("records")

利用这些现代方法,你可以更干净、更高效地完成 DataFrame 的结构转换,无论是用于建模、可视化,还是对外导出。