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

如何将两个键匹配的字典转为值在相邻列的DataFrame

从匹配键的两个字典生成相邻列DataFrame的解决方法

问题场景

现有两个键完全匹配的字典:

pl = {'seq1' : ['actgcta', 'cggctatcg'], 'seq2': ['cgatcgatca'], 'seq3': ['cgatcagt', 'cgataataat']}
pr = {'seq1' : ['cagtatacga', 'attacgat', 'atcgactagt'], 'seq2': ['cgatcgatca'], 'seq3': ['cgatcagt']}

需要将它们转换为DataFrame,让每个键对应的两个字典值处于相邻列,期望格式如下:

seq1 |['actgcta','cggctatcg']    |['cagtatacga', 'attacgat', 'atcgactagt']
--------------------------------------------------------------------------
seq2 |['cgatcgatca']             |['cgatcgatca']
--------------------------------------------------------------------------
seq3 |['cgatcagt', 'cgataataat'] |['cgatcagt']

此前尝试pd.DataFrame、pd.DataFrame.from_dict并调整orient参数未成功。

解决方案

可以通过两种简单方式实现需求:

方法1:Series拼接法

利用Pandas Series自动对齐索引的特性,直接拼接两个Series即可:

import pandas as pd

# 将字典转为Series,键自动成为行索引
s_pl = pd.Series(pl)
s_pr = pd.Series(pr)

# 按列拼接两个Series生成DataFrame,并设置列名
df = pd.concat([s_pl, s_pr], axis=1)
df.columns = ['pl_values', 'pr_values']

print(df)

输出结果:

pl_values                                   pr_values
seq1  [actgcta, cggctatcg]  [cagtatacga, attacgat, atcgactagt]
seq2        [cgatcgatca]                          [cgatcgatca]
seq3  [cgatcagt, cgataataat]                          [cgatcagt]

方法2:DataFrame按索引合并

如果偏好使用from_dict,需指定orient='index'将字典键设为行索引,再通过join合并:

import pandas as pd

# 按索引创建单个DataFrame,指定列名
df_pl = pd.DataFrame.from_dict(pl, orient='index', columns=['pl_values'])
df_pr = pd.DataFrame.from_dict(pr, orient='index', columns=['pr_values'])

# 按索引合并两个DataFrame
df = df_pl.join(df_pr)

print(df)

输出结果与方法1完全一致。

失败原因说明

之前尝试未成功,大概率是orient参数使用错误:

  • 若用orient='columns',字典的键会被当作DataFrame的列名,无法实现按行对齐键的需求;
  • 必须指定orient='index'让字典键成为行索引,才能保证两个字典的键对应到同一行,进而实现相邻列的布局。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:55:19