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

为何Pandas df.nunique()与PowerBI DAX DISTINCTCOUNT()结果不一致?

解决Pandas与PowerBI唯一值计数差异的方案

排查方向1:字符串隐藏字符差异

Pandas和PowerBI对字符串的处理可能在空白字符、不可见控制字符上存在区别,比如:

  • 字符串前后的空格("XYZ " vs "XYZ")
  • 全角/半角空格、制表符(\t)、换行符(\n)
  • 零宽空格等不可见字符

验证方法

在Python里检查列的字符串是否存在隐藏字符:

import pandas as pd
# 检查investor列的字符串长度分布,对比显示内容的长度
df['investor'].apply(lambda x: len(str(x)) if pd.notna(x) else None).value_counts()
# 筛选出前后带空格的样本
df[df['investor'].str.startswith(' ') | df['investor'].str.endswith(' ')]

解决方法

导出CSV前统一清洗字符串:

import re
def clean_string(s):
    if pd.isna(s):
        return s
    # 去除前后空白
    s = s.strip()
    # 替换全角空格为半角
    s = s.replace(' ', ' ')
    # 移除不可见控制字符
    s = re.sub(r'[\x00-\x1F\x7F]', '', s)
    return s

df['investor'] = df['investor'].apply(clean_string)
df['company'] = df['company'].apply(clean_string)
# 重新导出CSV
df.to_csv('cleaned_data.csv', index=False)

排查方向2:空值/空字符串的处理差异

虽然你试过df.nunique(dropna=False),但要注意:

  • Pandas会把NaN和空字符串""视为两个不同的唯一值
  • PowerBI中,空字符串和Null会被合并计数,DISTINCTCOUNT不会区分两者

验证方法

在Python里统计空值和空字符串的数量:

# 统计NaN数量
print(df['investor'].isna().sum())
# 统计空字符串数量
print((df['investor'] == '').sum())

解决方法

统一空值处理规则,比如把空字符串转为NaN:

df['investor'] = df['investor'].replace('', pd.NA)
df['company'] = df['company'].replace('', pd.NA)

排查方向3:PowerBI数据类型识别错误

PowerBI可能误将字符串列识别为混合数据类型,导致部分值被过滤或合并。

验证方法

在PowerBI中:

  1. 切换到数据视图,选中目标列(investor/company)
  2. 查看顶部的数据类型,确认是文本类型
  3. 检查列名旁是否有警告图标,查看具体错误值内容

解决方法

  • 手动将列类型设置为文本
  • 若存在错误值,回到Python定位对应行数据并清洗后重新导出

排查方向4:CSV编码兼容性问题

导出CSV时使用的编码若不被PowerBI兼容,可能导致部分字符串解析错误,出现乱码或被误判为重复值。

解决方法

导出CSV时指定PowerBI支持的编码:

df.to_csv('cleaned_data.csv', index=False, encoding='utf-8-sig')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:27:20