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

如何用Pandas concat替代append实现缺失行写入新DataFrame?

解决DataFrame对比与concat格式异常问题

先搞定「筛选df1独有的行」

要找出df1中不存在于df2的行,用这两种靠谱方法:

  1. merge指示器法(推荐,适合多列场景)
# 左连接两个df,标记每行来源
merged = df1.merge(df2, how='left', indicator=True)
# 只保留df1独有的行,删掉标记列
diff_rows = merged[merged['_merge'] == 'left_only'].drop(columns='_merge')
  1. 元组集合判断法(适合列少的简单场景)
# 把每行转成可哈希的元组,对比集合
df1_tuples = df1.apply(tuple, axis=1)
df2_tuple_set = set(df2.apply(tuple, axis=1))
diff_rows = df1[~df1_tuples.isin(df2_tuple_set)]

再用concat生成正确格式的结果

如果你的第三个DataFrame是要把这些差异行和已有数据(比如空df或者其他数据集)合并,关键要加ignore_index=True,避免索引混乱导致格式错位:

# 假设target_df是你要最终生成的第三个DataFrame(比如初始为空)
target_df = pd.concat([target_df, diff_rows], ignore_index=True)

之前concat格式不对,大概率是没加这个参数——原df的索引会被保留,拼接后可能出现重复索引、行结构错乱,加ignore_index=True会重置索引,生成连续的行号,和原来append的效果完全一致。

完整示例

import pandas as pd

# 示例数据
df1 = pd.DataFrame({'A': [1,2,3], 'B': ['x','y','z']})
df2 = pd.DataFrame({'A': [1,3], 'B': ['x','z']})

# 筛选差异行
merged = df1.merge(df2, how='left', indicator=True)
diff_rows = merged[merged['_merge'] == 'left_only'].drop(columns='_merge')

# 生成第三个DataFrame
target_df = pd.DataFrame(columns=['A','B'])  # 初始空df
target_df = pd.concat([target_df, diff_rows], ignore_index=True)

print(target_df)
# 输出:
#    A  B
# 0  2  y

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:24:51