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

如何将含列表值的字典转换为指定结构的Pandas DataFrame

问题:将字典转换为长格式Pandas DataFrame

现有如下字典:

data = {'key1': [2, 6, 7], 
        'key2': [9, 5, 3]}

需要将其转换为如下结构的Pandas DataFrame:

key   value
0  key1  2
1  key1  6
2  key1  7
3  key2  9
4  key2  5
5  key2  3

已尝试的方法及结果

方法一

import pandas as pd
data = {'key1': [2, 6, 7], 'key2': [9, 5, 3]}
df = pd.DataFrame(data.items())
print(df)

返回结果:

0          1
0  key1  [2, 6, 7]
1  key2  [9, 5, 3]

方法二

import pandas as pd
data = {'key1': [2, 6, 7], 'key2': [9, 5, 3]}
df = pd.DataFrame.from_dict(data)
print(df)

返回结果:

key1  key2
0     2     9
1     6     5
2     7     3

正确解法

方法1:使用pd.DataFrame.melt()

先将字典转为宽格式DataFrame,再通过melt方法重塑为长格式:

import pandas as pd
data = {'key1': [2, 6, 7], 'key2': [9, 5, 3]}

# 生成宽格式DataFrame
df_wide = pd.DataFrame.from_dict(data)
# 转换为目标长格式,指定列名
df_long = df_wide.melt(var_name='key', value_name='value')
print(df_long)

输出结果:

key  value
0  key1      2
1  key1      6
2  key1      7
3  key2      9
4  key2      5
5  key2      3

方法2:使用pd.Series.explode()

将字典转为Series后,展开列表元素并重置索引:

import pandas as pd
data = {'key1': [2, 6, 7], 'key2': [9, 5, 3]}

# 生成以字典键为索引的Series
s = pd.Series(data)
# 展开列表、重置索引并命名列
df_long = s.explode().reset_index(name='value').rename(columns={'index': 'key'})
print(df_long)

输出结果与方法1一致。

方法3:手动构造数据列表

遍历字典键值对,生成(key, value)元组列表后转为DataFrame:

import pandas as pd
data = {'key1': [2, 6, 7], 'key2': [9, 5, 3]}

# 生成包含所有键值对应关系的元组列表
records = [(k, v) for k, vals in data.items() for v in vals]
df_long = pd.DataFrame(records, columns=['key', 'value'])
print(df_long)

同样可得到目标格式的DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:07:26