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

Pandas合并CSV文件时如何按数值保留两位小数后匹配列完成合并

实现方案

核心逻辑是合并前将两个DataFrame中用于匹配的数值列统一处理为保留两位小数,基于处理后的临时列完成匹配,不会修改原始列的数值。

方案1:四舍五入保留两位小数匹配(最常用)

import pandas as pd

# 为两个DataFrame生成临时匹配列,四舍五入到两位小数
df1['X_match'] = df1['X1'].round(2)
df1['Y_match'] = df1['Y1'].round(2)

df2['X_match'] = df2['X2'].round(2)
df2['Y_match'] = df2['Y2'].round(2)

# 基于临时列完成合并
merged_df = pd.merge(df1, df2, on=['X_match', 'Y_match'])

# 删除不需要的临时匹配列
merged_df = merged_df.drop(columns=['X_match', 'Y_match'])

针对你给出的示例数据,处理后X列两位小数均为1.23、3.53,Y列均为2.27、5.63,可以正常匹配。

方案2:截断小数位匹配(直接忽略第三位及以后,不做四舍五入)

如果不需要四舍五入,直接截断第三位及以后的小数位,可以用以下逻辑替换上述的round代码:

# 截断到两位小数
df1['X_match'] = (df1['X1'] * 100).astype(int) / 100
df1['Y_match'] = (df1['Y1'] * 100).astype(int) / 100

df2['X_match'] = (df2['X2'] * 100).astype(int) / 100
df2['Y_match'] = (df2['Y2'] * 100).astype(int) / 100

方案3:转字符串匹配(避免浮点精度误差)

如果存在浮点精度导致的数值偏差问题,可以将处理后的数值转成固定两位小数的字符串再匹配,稳定性更高:

df1['X_match'] = df1['X1'].apply(lambda x: f"{x:.2f}")
df1['Y_match'] = df1['Y1'].apply(lambda x: f"{x:.2f}")

df2['X_match'] = df2['X2'].apply(lambda x: f"{x:.2f}")
df2['Y_match'] = df2['Y2'].apply(lambda x: f"{x:.2f}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:36:00