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

如何将numpy.ndarray转为单列并追加至已有DataFrame?

解决将Numpy数组作为单列追加到DataFrame的问题

我明白你的困扰:你有一个形状为(50, 300)的numpy数组,想把它作为名为C的单列追加到行数相同的DataFrame里,但直接用dataset.tolist()的话,数组会被拆成多列,完全不符合预期。

问题根源

当你直接把二维列表(dataset.tolist()的结果)赋值给DataFrame的新列时,Pandas会默认把这个二维结构解析成多列数据——它会把每个子数组的元素当成单独的列,这就是为什么你会看到拆分后的多列错误输出。

正确的实现方法

我们需要让Pandas把数组的每一行作为单个元素存入新列,最简单的方式是用pd.Series来包装数组(或其列表形式),这样就能确保每行被当作一个整体:

import numpy as np
import pandas as pd

# 还原你的示例数据
dataset = np.array([[1, 1500, 1, 2], [1, 1700, 3, 3], [1, 2000, 2, 2], [1, 2400, 2, 3], [1, 2700, 3, 3]])
df = pd.DataFrame({
    'sepal_length': [5.1, 4.9, 4.7, 4.6, 5.0],
    'sepal_width': [3.5, 3.0, 3.2, 3.1, 3.6],
    'petal_length': [1.4, 1.4, 1.3, 1.5, 1.4],
    'petal_width': [0.2, 0.2, 0.2, 0.2, 0.2],
    'species': ['setosa']*5
})

# 核心操作:用pd.Series包装数组,赋值为新列
df['C'] = pd.Series(dataset.tolist())

# 或者更高效的方式,不用转列表,直接包装numpy数组
# df['C'] = pd.Series(dataset)

执行后你就能得到和预期完全一致的joined_df:每一行的C列都是对应numpy数组行的列表。

额外技巧

如果你喜欢链式操作,也可以用df.assign()来实现:

joined_df = df.assign(C=pd.Series(dataset.tolist()))

这个方法适用于任何行数匹配的场景,不管你的numpy数组是(50,300)还是其他形状,只要行数量和DataFrame一致就没问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:52:53