【Pandas】pandas DataFrame nunique

Pandas2.2 DataFrame

Computations descriptive stats

方法描述
DataFrame.abs()用于返回 DataFrame 中每个元素的绝对值
DataFrame.all([axis, bool_only, skipna])用于判断 DataFrame 中是否所有元素在指定轴上都为 True
DataFrame.any(*[, axis, bool_only, skipna])用于判断 DataFrame 中是否至少有一个元素在指定轴上为 True
DataFrame.clip([lower, upper, axis, inplace])用于截断(限制)DataFrame 中的数值
DataFrame.corr([method, min_periods, …])用于计算 DataFrame 中各列之间的相关系数矩阵(Correlation Matrix)
DataFrame.corrwith(other[, axis, drop, …])用于计算当前 DataFrame 的每一列(或行)与另一个 Series 或 DataFrame 中对应列的相关系数
DataFrame.count([axis, numeric_only])用于统计 DataFrame 中每列或每行的非空(非 NaN)元素数量
DataFrame.cov([min_periods, ddof, numeric_only])用于计算 DataFrame 中每对列之间的协方差
DataFrame.cummax([axis, skipna])用于计算 DataFrame 中每列或每行的累计最大值(cumulative maximum)
DataFrame.cummin([axis, skipna])用于计算 DataFrame 中每列或每行的累计最小值(cumulative minimum)
DataFrame.cumprod([axis, skipna])用于计算 DataFrame 中每列或每行的累计乘积(cumulative product)
DataFrame.cumsum([axis, skipna])用于计算 DataFrame 中每列或每行的累计和(cumulative sum)
DataFrame.describe([percentiles, include, …])用于快速生成数据集的统计摘要(summary statistics)
DataFrame.diff([periods, axis])用于计算 DataFrame 中相邻行或列之间的差值(差分)
DataFrame.eval(expr, *[, inplace])用于在 DataFrame 上下文中高效地执行字符串形式的表达式运算
DataFrame.kurt([axis, skipna, numeric_only])用于计算 DataFrame 中每列或每行的峰度(Kurtosis)
DataFrame.kurtosis([axis, skipna, numeric_only])用于计算 DataFrame 中每列或每行的峰度(Kurtosis)
DataFrame.max([axis, skipna, numeric_only])用于计算 DataFrame 中每列或每行的最大值(maximum)
DataFrame.mean([axis, skipna, numeric_only])用于计算 DataFrame 中每列或每行的平均值(mean)
DataFrame.median([axis, skipna, numeric_only])用于计算 DataFrame 中每列或每行的中位数(median)
DataFrame.min([axis, skipna, numeric_only])用于计算 DataFrame 中每列或每行的最小值(minimum)
DataFrame.mode([axis, numeric_only, dropna])用于查找 众数(出现频率最高的值) 的方法
DataFrame.pct_change([periods, fill_method, …])用于计算 百分比变化 的方法
DataFrame.prod([axis, skipna, numeric_only, …])用于计算 每列或每行元素的乘积 的方法
DataFrame.product([axis, skipna, …])用于计算 DataFrame 中每列或每行所有元素的乘积
DataFrame.quantile([q, axis, numeric_only, …])用于计算 分位数(Quantiles) 的方法
DataFrame.rank([axis, method, numeric_only, …])用于计算 DataFrame 中每列或每行元素的排名(rank)
DataFrame.round([decimals])用于对 DataFrame 中的数值进行四舍五入
DataFrame.sem([axis, skipna, ddof, numeric_only])用于计算 标准误(Standard Error of the Mean, SEM),即样本均值的标准差
DataFrame.skew([axis, skipna, numeric_only])用于计算 DataFrame 中每列或每行的偏度(Skewness)
DataFrame.sum([axis, skipna, numeric_only, …])用于计算 DataFrame 中每列或每行所有元素的总和
DataFrame.std([axis, skipna, ddof, numeric_only])用于计算 标准差(Standard Deviation)
DataFrame.var([axis, skipna, ddof, numeric_only])用于计算 方差(Variance)
DataFrame.nunique([axis, dropna])用于计算每列或每行中唯一值的数量(distinct count)

pandas.DataFrame.nunique()

pandas.DataFrame.nunique() 方法用于计算每列或每行中唯一值的数量(distinct count)。它是数据分析中常用的统计方法之一,常用于了解数据的多样性、特征分布、去重分析等场景。


📌 方法签名:
DataFrame.nunique(axis=0, dropna=True)

🧾 参数说明:
参数类型默认值描述
axis{0/‘index’, 1/‘columns’}0
  • 0:按列计算唯一值数量(默认)
  • 1:按行计算唯一值数量 |
    | dropna | bool | True | 是否将 NaN 视为一个唯一值:
    - True:忽略 NaN
    - False:将 NaN 视为一种唯一值 |

📊 返回值
  • 返回一个 Series,表示每列(或每行)中唯一值的数量。
  • 若某列为非数值类型(如字符串、对象),也会正常统计唯一值数量。

✅ 示例及结果
示例数据:
import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A': [1, 2, 2, 3],
    'B': ['apple', 'banana', 'apple', 'orange'],
    'C': [5, 5, 5, 5],
    'D': [1.1, 2.2, 2.2, np.nan]
})

输出原始数据:

   A       B  C     D
0  1   apple  5   1.1
1  2  banana  5   2.2
2  2   apple  5   2.2
3  3  orange  5   NaN

示例 1:默认参数(按列统计唯一值数量)
df.nunique()

结果:

A    3
B    3
C    1
D    2
dtype: int64

解释:

  • 列 A:有 1, 2, 3 → 3 个唯一值
  • 列 B:有 ‘apple’, ‘banana’, ‘orange’ → 3 个唯一值
  • 列 C:全部是 5 → 只有 1 个唯一值
  • 列 D:有 1.1, 2.2(NaN 被忽略)→ 2 个唯一值

示例 2:设置 dropna=False(将 NaN 视为唯一值)
df.nunique(dropna=False)

结果:

A    3
B    3
C    1
D    3
dtype: int64

解释:

  • 列 D 现在包含 NaN,因此唯一值数量为 3(1.1, 2.2, NaN)

示例 3:按行统计唯一值数量(axis=1
df.nunique(axis=1)

结果:

0    4
1    4
2    3
3    3
dtype: int64

解释:

  • 第 0 行:1, ‘apple’, 5, 1.1 → 4 个不同值
  • 第 1 行:2, ‘banana’, 5, 2.2 → 4 个不同值
  • 第 2 行:2, ‘apple’, 5, 2.2 → 3 个不同值(2.2 和 2 出现两次)
  • 第 3 行:3, ‘orange’, 5, NaN → 3 个不同值(NaN 被视为相同)

示例 4:混合类型列也能正确处理
df_mixed = pd.DataFrame({
    'X': [1, 'a', 1, 2],
    'Y': [True, False, True, 'yes']
})

df_mixed.nunique()

结果:

X    3
Y    3
dtype: int64

解释:

  • 列 X:1, ‘a’, 2 → 3 个唯一值
  • 列 Y:True, False, ‘yes’ → 3 个唯一值

⚠️ 注意事项
  • 支持所有类型列(数值、字符串、布尔、对象等)
  • 默认忽略 NaN 值(可通过 dropna=False 控制)
  • 按行统计时也支持不同类型混用
  • 不会影响原始 DataFrame,返回新 Series

🎯 适用场景
场景描述
数据探索快速了解各列的唯一值数量,判断是否适合分类变量
特征工程构造新的统计特征,如“每行有多少种不同取值”
缺失值分析结合 dropna=False 分析 NaN 是否频繁出现
去重分析判断某一列是否具有足够多样性(如用户 ID、类别等)

📋 总结
特性描述
功能计算 DataFrame 每列或每行的唯一值数量
默认行为按列计算,忽略 NaN
是否修改原数据否,返回新 Series
适用类型所有类型(数值、字符串、布尔、对象等)
输出范围整数,表示唯一值数量

nunique() 是一个非常实用的方法,适合用于数据质量检查、特征分析、数据探索等任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuweidong0802

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值