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

如何用Pandas定位工作表拆分合并后缺失的80行数据?

如何用Pandas定位工作表拆分合并后缺失的80行数据?

嘿,刚上手Pandas遇到这种小问题太正常了,我给你分享几个简单直接的办法,帮你快速找到那缺失的80行!

第一步:先把四个子表合并成一个完整集合

你已经有四个拆分后的表(Fixable_Data、Removeable_Data、Severity_Changed、New_Data),先把它们合并成一个统一的DataFrame,用你之前用过的concat就行:

import pandas as pd

# 把四个子表合并,ignore_index重置索引避免重复
combined_subsets = pd.concat(
    [Fixable_Data, Removeable_Data, Severity_Changed, New_Data],
    ignore_index=True
)
# 可选:如果子表本身可能有重复行,先去重
combined_subsets = combined_subsets.drop_duplicates()

第二步:对比原表和合并后的子表,找出缺失行

现在你有两个核心数据集:原始的Unique_Data,以及刚合并好的combined_subsets。我们要找出只在Unique_Data里存在,却不在combined_subsets里的行,这里有两种简单方法:

方法一:用merge快速定位(推荐)

用外连接(outer join)对比两个表,Pandas会自动帮你标记行的来源:

# 外连接并添加_merge列标记行的归属
comparison_df = pd.merge(
    Unique_Data,
    combined_subsets,
    how='outer',
    indicator=True
)
# 筛选出只在Unique_Data里的行,就是缺失的部分
missing_rows = comparison_df[comparison_df['_merge'] == 'left_only'].drop('_merge', axis=1)

运行完后,missing_rows就是你要的第六个表,里面就是那80条丢失的数据。

方法二:用布尔索引直观筛选

如果觉得merge有点绕,也可以把每行转换成元组来对比:

# 把两个表的行都转成元组(忽略索引)
unique_rows = list(Unique_Data.itertuples(index=False, name=None))
combined_rows = list(combined_subsets.itertuples(index=False, name=None))

# 筛选出Unique_Data里不在合并子表中的行
missing_rows = Unique_Data[~Unique_Data.apply(tuple, axis=1).isin(combined_rows)]

小验证:确认结果

你可以用len(missing_rows)看看行数是不是接近80,这样就能确认找对了。另外,如果想检查合并后的子表有没有多余的行(虽然你是少了,但以防万一),只要把方法一里的'left_only'改成'right_only'就行。

额外提示

  • 先确认下Unique_Data确实没有重复行:运行Unique_Data.duplicated().sum(),如果结果是0就没问题,不然可能影响对比结果。
  • 如果你的表有主键(比如唯一ID列),用主键来对比会更高效,比如用isin检查ID列的差异,比整行对比更快。

备注:内容来源于stack exchange,提问作者Robert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 12:59:29