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

pandas merge合并csv与Excel时数值关联列匹配失败如何解决

问题诱因

匹配失败的核心原因是两个待合并DataFrame的gesellschaft列数据类型不统一:

  • 从CSV读取的df1中,gesellschaft列同时存在纯数字值(0、10000)和字符串值(M552D),pandas会默认将该列推断为字符串类型,其中的数字会被存储为字符串格式,如"0"、"10000"。
  • 从Excel读取的df2中,gesellschaft列的纯数字值会被pandas自动识别为数值类型(int或float),仅M552D这类非纯数字内容为字符串类型。
  • pandas的merge操作是严格校验值和数据类型的,数值类型的0和字符串类型的"0"会被判定为不相等,因此只有两边同为字符串类型的M552D可以正常匹配。设置how='right'时其余列丢失,本质是类型不匹配导致左表关联行匹配失败、被填充空值,和merge的连接方向参数本身无关。
解决方案

合并前先统一两个表关联列的数据类型,再执行原有合并逻辑即可:

import pandas as pd

df1 = pd.read_csv(r'path', sep=',').drop(columns = ['risiko'])
df2 = pd.read_excel(r'path')

# 统一关联列为字符串类型,解决类型不匹配问题
df1['gesellschaft'] = df1['gesellschaft'].astype(str)
df2['gesellschaft'] = df2['gesellschaft'].astype(str)

# 按原有逻辑执行合并
df3 = pd.merge(df1, df2[['status','stati']], on='status', how='left').drop(columns = ['status'])
df4 = df3.merge(df2[['sparte','sparten']], on='sparte', how='left').drop(columns = ['sparte'])
df4 = df4.merge(df2[['gesellschaft','gesellschaften']], on='gesellschaft', how='left')
print(df4)

如果读取Excel时gesellschaft列的数字被识别为浮点型(比如0被识别为0.0),直接转字符串会得到"0.0"这类值,和CSV侧转成的"0"仍然无法匹配,可追加一步字符串清洗,去除末尾的.0后缀:

# 处理浮点转字符串带来的.0后缀问题
df1['gesellschaft'] = df1['gesellschaft'].astype(str).str.replace(r'\.0$', '', regex=True)
df2['gesellschaft'] = df2['gesellschaft'].astype(str).str.replace(r'\.0$', '', regex=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:30:48