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

如何将DataFrame中的嵌套二维数组展开为行?

解决方法

你的问题出在b列的元素是三维嵌套结构(外层多了一层数组/列表),直接用apply(pd.Series)会因为维度不兼容报错。我们可以通过两步操作快速实现你想要的展开效果:

1. 预处理列数据,降低嵌套层级

首先把a列的单层嵌套去掉,同时把b列的三维数组转换成二维的坐标列表:

# 处理a列:从[[x, y]]提取出[x, y]
df['a'] = df['a'].apply(lambda x: x[0])
# 处理b列:从[[[x1,y1], [x2,y2], ...]]提取出[[x1,y1], [x2,y2], ...]
df['b'] = df['b'].apply(lambda arr: arr[0].tolist())

2. 用explode展开成多行

pandas的explode方法可以把列中的列表元素拆分成单独的行,同时自动重复对应行的a值:

result_df = df.explode('b')

示例验证

假设你的原始数据是这样的:

import pandas as pd
import numpy as np

data = {
    'a': [[35.6113, -95.855]],
    'b': [np.array([[[36.028, -95.93], [36.10, -95.82], [36.154, -95.993]]])]
}
df = pd.DataFrame(data)

运行上面的代码后,result_df的输出就是你想要的格式:

a                  b
0  [35.6113, -95.855]  [36.028, -95.93]
0  [35.6113, -95.855]   [36.1, -95.82]
0  [35.6113, -95.855]  [36.154, -95.993]

为什么原方法报错?

你之前尝试的df['b'].apply(pd.Series)要求输入是一维或二维的可迭代对象,但你的b列元素是三维数组(比如你给出的例子shape是(1, 20, 2)),三维结构无法直接映射成列,所以会抛出"必须为一维数组"的错误。先降维再展开就完美解决这个问题了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:43:07