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

pandas使用value_counts统计时无法识别相同值、结果异常如何解决

异常原因
  • ORIGIN列的同国籍字符串存在肉眼不可区分的内容差异,pandas的value_counts()为精确匹配机制,因此会被拆分为不同类别统计。最常见的差异来源为字符串首尾多余的空白字符(空格、制表符、换行符等),其次为零宽空格、不间断空格等特殊不可见Unicode字符,小概率场景为全角/半角字符混用、大小写不一致。
问题排查

执行如下代码可确认是否为字符内容差异问题:

# 打印ORIGIN列所有唯一值的原始表示、字符长度
for val in file['ORIGIN'].unique():
    print(f"原始值:{repr(val)},字符长度:{len(val)}")

如果相同文字的值返回的长度不一致、或repr()输出中能看到额外的空白/特殊字符,即可确认问题根源。

解决方案

普通首尾空白场景

如果仅为普通首尾空白,直接用strip()清除即可:

import pandas as pd
file = pd.read_csv("test_data.csv")
# 清洗后直接统计
file['ORIGIN'].str.strip().value_counts()
# 如需保存清洗后结果到原列
# file['ORIGIN'] = file['ORIGIN'].str.strip()

包含特殊不可见字符场景

如果存在零宽空格、不间断空格等特殊不可见字符,可通过正则清除所有非打印字符后再统计:

import re
# 清除所有不可见特殊字符+首尾空白
file['ORIGIN'] = file['ORIGIN'].apply(lambda x: re.sub(r'[\x00-\x1F\x7F-\x9F\u200B-\u200F\uFEFF]', '', x).strip())
file['ORIGIN'].value_counts()

其他兼容场景

如果存在全角半角混用、大小写不一致的问题,可增加对应处理逻辑:

def clean_origin_str(s):
    # 全角转半角
    res = []
    for c in s:
        ord_c = ord(c)
        if ord_c == 12288:
            res.append(' ')
        elif 65281 <= ord_c <= 65374:
            res.append(chr(ord_c - 65248))
        else:
            res.append(c)
    s = ''.join(res)
    # 清除不可见字符+首尾空白
    s = re.sub(r'[\x00-\x1F\x7F-\x9F\u200B-\u200F\uFEFF]', '', s).strip()
    # 统一为标题格式(首字母大写,其余小写)
    s = s.title()
    return s

file['ORIGIN'] = file['ORIGIN'].apply(clean_origin_str)
file['ORIGIN'].value_counts()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:57:03