Pandas.DataFrame.var() 方差 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本: 本文基于 pandas2.2.0 编写。

关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。

传送门: Pandas API参考目录

传送门: Pandas 版本更新及新特性

传送门: Pandas 由浅入深系列教程

Pandas.DataFrame.var()

Pandas.DataFrame.var 方法用于返回行或列的方差,默认 ddof=1 返回 样本方差

计算公式:

  • 样本方差公式 Pandas.DataFrame.var 默认的方差计算方法是以 n-1 为底,即样本方差:

    s 2 = ∑ i = 1 n ( x i − x ˉ ) 2 n − 1 s^2 ={\frac{\sum_{i=1}^{n}(x_i - \bar{x})^2}{n-1}} s2=n1i=1n(xixˉ)2

    s 2 s^2 s2 表示样本方差, n n n 表示样本大小, x i x_i xi 表示每个观测值, x ˉ \bar{x} xˉ 表示样本均值。

  • 总体方差公式

    σ 2 = ∑ i = 1 N ( x i − μ ) 2 N \sigma^2 ={\frac{\sum_{i=1}^{N}(x_i - \mu)^2}{N}} σ2=Ni=1N(xiμ)2

    σ 2 \sigma^2 σ2 表示总体方差, μ \mu μ 表示总体均值, N N N 表示总体大小。

语法:

DataFrame.var(axis=0, skipna=True, ddof=1, numeric_only=False, **kwargs)

返回值:

  • Series or DataFrame (if level specified)

    • 返回 SeriesDataFrame ,依传输的数据结构而定。

参数说明:

axis 指定计算方向(行或列)

  • axis : {0 or ‘index’, 1 or ‘columns’}, default 0

    axis 参数,用于指定计算方向,即按行计算或按列计算方差:

    • 如果是 Series 此参数无效,将始终保持 axis=0,即计算整列的方差。例1
    • 如果是 DataFrame 默认为 axis=0 即计算每一列的方差。并有以下参值可选:
      • 0 or ‘index’: 计算每列的方差。 例2
      • 1 or ‘columns’: 计算每行的方差。例3

    ⚠️ 注意 :

    axis=None 已被标记为弃用,在未来的版本,将使用新的方法实现。

skipna 忽略缺失值

  • skipna : bool, default False >

    skipna 参数,用于指定求方差的时候是否忽略缺失值:

    • False: 不忽略,缺失值 在求方差的时候,会被解析为浮点数 float 0.0
    • True: 忽略缺失值。

    ⚠️ 注意 :

    如果整行或整列,都是缺失值,那么方差结果是依然是NaN。 例4

numeric_only 排除非纯数值的行或列

  • numeric_only : bool, default False

    numeric_only 参数,用于控制是否 排除非纯数值的行或列:

    • False: 不排除。
    • True: 只对纯数值型的行或列计算方差。例5

ddof 自由度修正

  • ddof : int, default 1 例6

    ddof : Delta 自由度,用于计算的除数是 N-ddof ,其中 N 代表元素的数量。默认 ddof=1

    • ddof=1 计算 样本方差(默认)
    • ddof=0 计算 总体方差
      • ddof=0 DataFrame.var 的行为和 numpy.var 一致。
  • ⚠️ddof 应该如何取值?:

    • 如果你准备计算方差的数据,是某个总体数据集的一部分样本,你想通过这一部分样本对总体数据集的方差进行无偏估计,则可以选择使 ddof=1 或保持默认。进行 样本方差 的计算。
    • 如果你准备计算方差的数据,就是你的总体数据集的全部,你可以选择使ddof=0 。进行 总体方差 的计算。

相关方法:

➡️ 相关方法


示例:

测试文件下载:

本文所涉及的测试文件,如有需要,可在文章顶部的绑定资源处下载。

若发现文件无法下载,应该是资源包有内容更新,正在审核,请稍后再试。或站内私信作者索要。

测试文件下载位置.png

测试文件下载位置

例1:如果是 Series 始终保持 axis=0,即计算整列的方差。

import numpy as np
import pandas as pd

s = pd.Series([24.0, np.nan, 21.0, 33, 26], name="age")
s.var()
26.0

例2、求 DataFrame 每列的样本方差

import numpy as np
import pandas as pd

df = pd.DataFrame(
    {
   
        "person_id": [0, 1, 2, 3],
        "age": [21, 25, 62, 43],
        "height": [1.61, 1.87, 1.49, 2.01],
    }
).set_index("person_id")


df.var()
age       352.916667
height      0.056367
dtype: float64

例3、求 DataFrame 每行的样本方差

import numpy as np
import pandas as pd

df = pd.DataFrame(
    {
   
        "person_id": [0, 1, 2, 3],
        "age": [21, 25, 62, 43],
        "height": [1.61, 1.87, 1.49, 2.01],
    }
).set_index("person_id")


df.var(axis=1)
person_id
0     187.98605
1     267.49845
2    1830.73005
3     840.09005
dtype: float64

例4:如果整行或整列,都是缺失值,那么方差计算结果也是缺失值。

import pandas as pd
import numpy as np

df = pd.DataFrame({
   "A": [0.5, 0.2], "B": ["a", 0.7], "C": [np.NaN, np.NaN]})

df.var(axis=0, numeric_only=True)
A    0.045
C      NaN
dtype: float64

C列由于都是缺失值,计算结果也是缺失值。

例5:numeric_only=True 只对数值类型的数据求样本方差。

import pandas as pd

df = pd.DataFrame({
   "A": [0.5, 1, 2], "B": ["a", "a", "a"], "C": [True, True, True]})

df.var(axis=0, numeric_only=True)
A    0.583333
C    0.000000
dtype: float64

B列由于字符串,所以没有被计算方差

例6:控制自由度修正值,当 ddof=0 将计算 总体方差

观察计算每列样本方差的结果

df = pd.DataFrame(
    {
   
        "person_id": [0, 1, 2, 3],
        "age": [21, 25, 62, 43],
        "height": [1.61, 1.87, 1.49, 2.01],
    }
).set_index("person_id")
df.var()
age       352.916667
height      0.056367
dtype: float64

观察计算每列总体方差的结果

df.var(ddof=0)
age       264.687500
height      0.042275
dtype: float64

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-05 16:48:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-05 16:48:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-05 16:48:01       87 阅读
  4. Python语言-面向对象

    2024-02-05 16:48:01       96 阅读

热门阅读

  1. Kafka的高可用机制

    2024-02-05 16:48:01       55 阅读
  2. 2.3作业

    2.3作业

    2024-02-05 16:48:01      45 阅读
  3. flink实战--flink的job_listener使用解析

    2024-02-05 16:48:01       50 阅读
  4. android tv开发-1,leanback替代品

    2024-02-05 16:48:01       54 阅读
  5. sklearn缺失值处理:SimpleImputer模块 补全缺失值

    2024-02-05 16:48:01       53 阅读
  6. 【Android】获取设备IP的方法

    2024-02-05 16:48:01       55 阅读
  7. 使用freemarker和itextpdf结合,将html转化为pdf

    2024-02-05 16:48:01       52 阅读
  8. vue封装滚动表格

    2024-02-05 16:48:01       52 阅读
  9. 考了二级建造师证书后,有哪些好处呢?

    2024-02-05 16:48:01       54 阅读