如何将 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 本身并不难,更关键是根据你的目标选择合适的结构:
| 目标 | 推荐方法 |
|---|---|
| 每行表示为一个 list | df.to_numpy().tolist() |
| 单列转换为 list | df[col].tolist() |
| 使用元组(如 SQL / 某些 API) | [tuple(x) for x in df.to_numpy()] |
| 转成 JSON 友好的对象结构 | df.to_dict("records") |
利用这些现代方法,你可以更干净、更高效地完成 DataFrame 的结构转换,无论是用于建模、可视化,还是对外导出。