You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从包含ndarray的嵌套列表创建Pandas DataFrame?

解决嵌套列表含ndarray转Pandas DataFrame的问题

你遇到的核心问题是列表内元素结构不统一,导致直接转DataFrame不符合预期,而循环append又效率低下还容易出问题。咱们一步步来解决:

问题重现

先确认你的场景:

import numpy as np
import pandas as pd

a = list([[1,2],[2,3]])
a[0] = np.array([[1,2]])
a[0][0] = np.array([1,2])

# 直接转换的结果不符合预期
print(pd.DataFrame(a))
# 输出:
#        D0
# 0  [1, 2]
# 1  [2, 3]

你期望得到的是:

D0  D1
0   1   2
1   2   3

问题根源

你的列表a里的元素维度不统一:a[0]是二维ndarray,a[1]是普通一维列表。Pandas直接解析时,会把每个顶层元素当成一行的单个值,所以生成了单列DataFrame。而循环append的方式不仅效率极低(Pandas的DataFrame是不可变对象,每次append都会创建新副本,数据量大时是O(n²)复杂度),还容易因为初始化不当产生重复数据。

高效解决方案

方法1:统一展平元素后构建DataFrame

先把所有元素(不管是ndarray还是列表)都展平成一维结构,再整体转DataFrame:

# 用np.ravel快速展平每个元素,自动兼容ndarray和列表
processed_data = [np.ravel(item) for item in a]
df = pd.DataFrame(processed_data, columns=['D0', 'D1'])
print(df)

方法2:用Numpy合并后转DataFrame

如果所有元素都可以合并成二维数组,直接用Numpy的向量化操作合并,再转DataFrame,效率更高:

# 合并所有元素为二维数组
combined_arr = np.concatenate(a)
df = pd.DataFrame(combined_arr, columns=['D0', 'D1'])
print(df)

两种方法都能得到你期望的结果,而且比循环append快几个数量级,尤其是数据量大的时候。

另外要注意:pd.DataFrame.append()已经在Pandas 2.0及以上版本被弃用了,官方推荐用pd.concat()代替,但即使是concat,也不建议在循环里多次调用——最好是先把所有要合并的对象收集到列表里,再一次性concat,效率会高很多。

内容的提问来源于stack exchange,提问作者SwagZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:10:17