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

如何比较不同长度、数据类型的两个DataFrame?

解决方案

核心思路是把两个DataFrame的num列统一转换为纯字符串格式,消除类型和格式差异后再进行比较。

步骤1:统一列格式

  • 处理df2的num列:先将float类型转为整数(你的df2数据都是整数型浮点值),再转成字符串,避免.0后缀干扰匹配
  • 处理df1的num列:直接将Object类型转为字符串,把混合的整数/字符串统一成字符串格式

代码示例:

import pandas as pd

# 模拟原始数据
df1 = pd.DataFrame({'num': [100899, 1980903, 'AB347980', 'RT198090']})
df2 = pd.DataFrame({'num': [100899.0, 1980903.0, 937974938.0, 2837982.0]})

# 统一格式为字符串
df1['num_str'] = df1['num'].astype(str)
df2['num_str'] = df2['num'].astype(int).astype(str)

步骤2:执行比较操作

根据需求选对应的方式:

找两表共有的num值(交集)

用merge关联筛选匹配行:

common_entries = pd.merge(df1, df2, on='num_str', how='inner')
print(common_entries[['num_x', 'num_y']])
# 输出包含100899、1980903这两组匹配数据

找df1独有的num值(差集)

用isin筛选:

df1_only = df1[~df1['num_str'].isin(df2['num_str'])]
print(df1_only['num'])
# 输出AB347980、RT198090

找df2独有的num值

同理操作:

df2_only = df2[~df2['num_str'].isin(df1['num_str'])]
print(df2_only['num'])
# 输出937974938.0、2837982.0

特殊情况处理

如果df2的num列存在非整数型浮点值(比如123.45),别直接转整数,改成转字符串后去掉.0后缀:

df2['num_str'] = df2['num'].astype(str).str.replace(r'\.0$', '', regex=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 06:06:45