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

合并两个DataFrame,无匹配项时填充NaN

用Pandas实现DataFrame左连接合并

这其实是个典型的**左连接(left join)**场景,用Pandas的merge()函数就能轻松实现你的需求——保留第一个DataFrame的所有行,同时把第二个DataFrame中匹配的分类信息tax_inf对应过来,没有匹配的位置自动填充NaN。具体步骤如下:

步骤1:构造示例数据(如果你的数据已经存在,这步可以跳过)

先把你给出的两个DataFrame用Pandas构造出来:

import pandas as pd

# 第一个DataFrame
df1 = pd.DataFrame({
    'qseqid': ['seq1', 'seq2', 'seq3', 'seq4'],
    'sseqid': ['seq24', 'seq12', 'seq34', 'seq90'],
    'pident': [78, 73, 12, 70],
    'length': [789, 790, 77, 790],
    'mismatch': [45, 44, 42, 41]
})

# 第二个DataFrame
df2 = pd.DataFrame({
    'seq2_id': ['seq3', 'seq1'],
    'tax_inf': ['Virus', 'Eucaryote']
})

步骤2:执行左连接合并

使用pd.merge()函数,指定左连接模式,同时明确两个DataFrame的匹配键(第一个的qseqid和第二个的seq2_id):

# 执行左连接,匹配键分别为df1的qseqid和df2的seq2_id
merged_df = pd.merge(df1, df2, left_on='qseqid', right_on='seq2_id', how='left')

# 移除合并后多余的seq2_id列(因为你的目标输出里不需要这一列)
merged_df = merged_df.drop(columns='seq2_id')

最终结果

运行上面的代码后,merged_df就会完全符合你想要的格式:

qseqid sseqid  pident  length  mismatch    tax_inf
0   seq1  seq24      78     789        45  Eucaryote
1   seq2  seq12      73     790        44        NaN
2   seq3  seq34      12      77        42      Virus
3   seq4  seq90      70     790        41        NaN

关键参数说明

  • how='left':表示以左表(也就是df1)为基准,保留所有行,右表(df2)中没有匹配的行就用NaN填充。
  • left_on='qseqid'和right_on='seq2_id':指定两个表用来匹配的列,因为这两列的列名不同,所以需要分别指定。如果列名相同的话,直接用on='列名'就可以了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:22:38