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

合并两个DataFrame时遇警告:浮点值与其整数表示不相等

解决Pandas Join时的类型不匹配警告(已统一float仍触发)

问题重现

执行以下代码合并两个DataFrame:

joined_df = Register.join(
    ledger,
    lsuffix='Register',
    rsuffix='ledger',
    on='Gross',
    how='left')

收到警告:

<ipython-input-63-87afd279f9b6>:1: UserWarning: You are merging on int and float columns where the float values are not equal to their int representation.

已将两个DataFrame的Gross列都转为float64类型,但警告依然存在。

原因分析

虽然表面上两列都是float64,但Pandas的合并检测逻辑会检查数值的实际特征:如果其中一列的浮点数全部是整数形式(如5.0、10.0),而另一列包含非整数值(如5.5),就会被判定为“本质上的int与float合并”,从而触发警告。另外,浮点数的精度误差也可能间接导致这类检测异常。

解决方案

1. 确认列值是否为整数,统一转为int类型(推荐)

如果Gross列的业务含义是整数,只是被存为了浮点数,先验证所有值是否为整数:

# 检查两列是否全为整数型浮点数
print(Register['Gross'].apply(lambda x: x.is_integer()).all())
print(ledger['Gross'].apply(lambda x: x.is_integer()).all())

如果结果都是True,直接转为整数类型再合并:

Register['Gross'] = Register['Gross'].astype('int64')
ledger['Gross'] = ledger['Gross'].astype('int64')

# 重新执行合并
joined_df = Register.join(
    ledger,
    lsuffix='Register',
    rsuffix='ledger',
    on='Gross',
    how='left')

2. 统一浮点精度(适用于确实需要浮点类型的场景)

如果Gross列必须保留浮点类型,通过四舍五入统一精度,避免数值特征差异触发警告:

# 根据业务需求保留小数位数,示例为2位
Register['Gross'] = Register['Gross'].round(2)
ledger['Gross'] = ledger['Gross'].round(2)

# 重新执行合并
joined_df = Register.join(
    ledger,
    lsuffix='Register',
    rsuffix='ledger',
    on='Gross',
    how='left')

3. 临时禁用该警告(不推荐,仅在确认无问题时使用)

如果已经确认数据无问题,只是想屏蔽警告:

import warnings
# 精准匹配警告信息,避免屏蔽其他有用警告
warnings.filterwarnings(
    'ignore',
    category=UserWarning,
    message='You are merging on int and float columns where the float values are not equal to their int representation.'
)

# 执行合并
joined_df = Register.join(
    ledger,
    lsuffix='Register',
    rsuffix='ledger',
    on='Gross',
    how='left')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 02:55:14