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()
是一个非常实用的方法,适合用于数据质量检查、特征分析、数据探索等任务。