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

如何将含numpy数组列表的字典导入空DataFrame指定列

搞定你的字典转DataFrame需求

嘿,我来帮你解决这个问题!这里有两种实用的方法,能把你的字典转换成你想要的DataFrame结构:

方法一:用列表推导式快速整理数据

这是最直观的方式,先把所有数据拆成(x,y,z)的元组,再转成DataFrame:

import numpy as np
import pandas as pd

# 你的原始字典
my_dict = {
    0: [np.array([5.4, 3.9, 1.3, 0.4]), np.array([4.9, 3. , 1.4, 0.2]), np.array([4.6, 3.6, 1. , 0.2]), np.array([4.6, 3.2, 1.4, 0.2]), np.array([4.7, 3.2, 1.6, 0.2])],
    1: [np.array([6.1, 2.9, 4.7, 1.4]), np.array([5.9, 3. , 4.2, 1.5]), np.array([7.4, 2.8, 6.1, 1.9])],
    2: [np.array([7. , 3.2, 4.7, 1.4]), np.array([5.6, 2.7, 4.2, 1.3])]
}

# 遍历字典,把每个数组的前两个元素和对应键打包成元组
data = [(arr[0], arr[1], z) for z, arr_list in my_dict.items() for arr in arr_list]

# 转换成DataFrame并指定列名
df = pd.DataFrame(data, columns=['x', 'y', 'z'])

print(df)

运行后输出的结果就和你期望的完全一致,这种方法逻辑清晰,数据量较大时效率也不错。

方法二:用pandas内置函数实现(更贴合pandas风格)

如果习惯用pandas的操作流程,可以这么做:

import numpy as np
import pandas as pd

my_dict = {
    0: [np.array([5.4, 3.9, 1.3, 0.4]), np.array([4.9, 3. , 1.4, 0.2]), np.array([4.6, 3.6, 1. , 0.2]), np.array([4.6, 3.2, 1.4, 0.2]), np.array([4.7, 3.2, 1.6, 0.2])],
    1: [np.array([6.1, 2.9, 4.7, 1.4]), np.array([5.9, 3. , 4.2, 1.5]), np.array([7.4, 2.8, 6.1, 1.9])],
    2: [np.array([7. , 3.2, 4.7, 1.4]), np.array([5.6, 2.7, 4.2, 1.3])]
}

# 先把字典转成包含数组列表的初始DataFrame
df_initial = pd.DataFrame.from_dict(my_dict, orient='index').T.melt(var_name='z', value_name='arr').dropna()

# 展开列表,再提取每个数组的前两个元素作为x和y
df = df_initial.explode('arr').assign(
    x=lambda x: x['arr'].apply(lambda arr: arr[0]),
    y=lambda x: x['arr'].apply(lambda arr: arr[1])
)[['x', 'y', 'z']].reset_index(drop=True)

print(df)

这个方法全程用pandas的函数处理,适合已经熟悉pandas操作的场景。

小提醒

如果你的数组可能存在长度不足2的情况,可以加个小处理避免报错,比如把arr[0]改成arr[:2][0],这样即使数组只有1个元素也不会直接崩溃(当然最好还是确保所有数组都至少有2个元素哦)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:13:24