You need to enable JavaScript to run this app. 如何将3D NumPy数组按行存入现有Pandas DataFrame的列
优惠活动
大模型
产品
解决方案
定价
更多

如何将3D NumPy数组按行存入现有Pandas DataFrame的列

实现方法

直接按第一维拆分3D数组再赋值就行,核心是避免Pandas自动把高维数组展开成多列。

对齐前提

先确认两个长度完全匹配:

  • 你的3D NumPy数组第一轴的长度
  • 现有DataFrame的总行数

本例里test的shape是(3,2,3),刚好对应3行数据,和索引为1、2、3的节点行一一对应,满足对齐要求。

核心赋值代码

不需要复杂的循环,一行就能完成不破坏原有结构的赋值:
df[2] = list(test)

原理很简单:list()对3D NumPy数组做迭代时,是沿第一轴逐个取元素,每一个元素都是对应行的2D子数组。把这个列表赋值给新列时,Pandas会把每个子数组作为独立对象存到对应行,不会把后续维度拆成额外列。

完整可复现代码

import pandas as pd
import numpy as np

# 按原有逻辑构造基础DataFrame
df = pd.DataFrame({"nodes": list(range(1, 4))})
df = df.set_index("nodes")
df[0] = list(range(1, 6, 2))
df[1] = [10, 20, 30]

# 构造测试用3D数组
test = np.array([[[1,2,3],
                  [4,5,6]],
                 [[10,20,30],
                  [40,50,60]],
                 [[0,1,0],
                  [-1,-1,-1]]])

# 新增列存入3D数组,原有列、索引完全不受影响
df[2] = list(test)

运行后得到的结果和预期的结构完全一致:

0   1                                          2
nodes                                                    
1       1  10  [[1, 2, 3], [4, 5, 6]]
2       3  20    [[10, 20, 30], [40, 50, 60]]
3       5  30       [[0, 1, 0], [-1, -1, -1]]

容易踩的坑

  • 千万别直接写df[2] = test:这种写法下Pandas会自动把3D数组拆成多列,最后要么报列结构不匹配的错,要么把原有表结构弄乱。
  • 这一列存的是NumPy数组对象,不是数值标量,没法直接用Pandas的原生向量化运算(比如整列加常数、求均值),必须逐行取出数组单独计算。
  • 如果要把带这类数组列的DataFrame导出成CSV,得先把数组转成字符串序列化,不然导出后会丢失嵌套结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 10:45:05