如何将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
相关产品推荐
相关产品推荐

