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

在Django中用Pandas合并数据帧出现单条数据匹配失败及NaN问题

Django中Pandas合并DataFrame单条数据匹配失败的排查方案

问题核心

在Django的views.py中使用pd.merge合并两个DataFrame时,仅一条数据出现NaN匹配失败,但在Colab中执行相同逻辑却完全正常。

可能原因与对应解决方案

1. 字符串首尾空格/不可见字符差异

本地Windows环境下读取的Excel或数据库返回的字符串可能包含空格、换行符(\n)、制表符(\t)等不可见字符,导致表面相同的字符串实际不匹配。

解决方案:合并前对两个字段做清洗:

# 去除首尾空格
df_list['적요'] = df_list['적요'].str.strip()
df_memo['memo'] = df_memo['memo'].str.strip()

# 替换所有连续空白字符为单个空格(处理换行、制表符等)
df_list['적요'] = df_list['적요'].str.replace(r'\s+', ' ', regex=True)
df_memo['memo'] = df_memo['memo'].str.replace(r'\s+', ' ', regex=True)

2. 字符串编码/标准化差异

韩文等非ASCII字符在不同环境下的编码标准化(如NFC/NFD)可能不同,导致字符串哈希值不一致。

解决方案:统一字符串标准化格式:

import unicodedata

def normalize_str(s):
    return unicodedata.normalize('NFC', s)

df_list['적요'] = df_list['적요'].apply(normalize_str)
df_memo['memo'] = df_memo['memo'].apply(normalize_str)

3. 字段类型不一致

Excel读取的적요字段可能被识别为混合类型(部分是字符串,部分是数值),而Django queryset转成的memo是纯字符串,导致类型不匹配。

解决方案:强制将两个字段转为字符串类型:

df_list['적요'] = df_list['적요'].astype(str)
df_memo['memo'] = df_memo['memo'].astype(str)

4. 全角/半角字符差异

韩文或符号的全角、半角形式会被Pandas视为不同字符串,比如全角空格 和半角空格 。

解决方案:将全角字符转换为半角:

import unicodedata

def full2half(s):
    return unicodedata.normalize('NFKC', s)

df_list['적요'] = df_list['적요'].apply(full2half)
df_memo['memo'] = df_memo['memo'].apply(full2half)

先排查再修复

建议先添加调试代码,确认不匹配字段的具体内容:

# 替换成截图中不匹配的'적요'字段内容
target_content = "你的目标内容"
# 查看Excel中字段的原始字符串(含不可见字符)
print("Excel字段原始值:", repr(df_list[df_list['적요'] == target_content]['적요'].values[0]))
# 查看数据库中对应字段的原始字符串
print("数据库字段原始值:", repr(df_memo[df_memo['memo'] == target_content]['memo'].values[0]))

通过repr()可以看到字符串中的不可见字符(如'abc \n def'),精准定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:10:04