数据运算

  • 8 数据运算
  • 8.1 算术运算
  • Excel
  • Python
  • 8.2 比较运算
  • Excel
  • Python
  • 8.3 汇总运算
  • 8.3.1 计算总个数count
  • Excel
  • Python
  • 8.3.2 计算总和sum
  • Excel
  • Python
  • 8.3.3 计算算术平均数mean
  • Excel
  • Python
  • 8.3.4 计算最值max min
  • Excel
  • Python
  • 8.3.5 计算中位数median
  • Excel
  • Python
  • 8.3.6 计算众数mode
  • Excel
  • Python
  • 8.3.7 计算方差 var
  • Excel
  • Python
  • 8.3.8 计算标准差std
  • Excel
  • Python
  • 8.3.9 计算分位数quantile
  • Excel
  • Python
  • 8.3.10 计算协方差cov
  • Excel
  • Python
  • 8.3.11 计算相关系数correl
  • Excel
  • Python


8 数据运算

8.1 算术运算

Excel

基本的公式运用

=算术运算对象 算术运算符(+ - * /) 算术运算对象

Python

Series对象可以直接通过算术符进行加减乘除等运算,返回一个新的Series对象

df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})

# 两列相加
print(df["A"] + df["B"])
"""
0    5
1    7
2    9
dtype: int64
"""
# 两列相减
print(df["A"] - df["B"])
"""
0   -3
1   -3
2   -3
dtype: int64
"""

#两列相乘
print(df["A"] * df["B"])
"""
0     4
1    10
2    18
dtype: int64
"""

#两列相除
print(df["A"] / df["B"])
"""
0    0.25
1    0.40
2    0.50
dtype: float64
"""

# 列的每个元素+1
print(df["A"] + 1)
"""
0    2
1    3
2    4
Name: A, dtype: int64
"""

# 列的每个元素-1
print(df["A"] - 1)
"""
0    0
1    1
2    2
Name: A, dtype: int64
"""

#列的每个元素乘2
print(df["A"] * 2)
"""
0    2
1    4
2    6
Name: A, dtype: int64
"""

#列的每个元素除2
print(df["A"] / 2)
"""
0    0.5
1    1.0
2    1.5
Name: A, dtype: float64
"""

8.2 比较运算

Excel

基本的公式运用

=比较运算对象 比较运算符(> = < >= <= <>[不等于]) 比较运算对象

Python

Series对象可以直接通过比较符(> == < >= <= !=)进行比较运算,返回一个新的Series对象,由比较的结果(TrueFalse)组成。

df = pd.DataFrame({"A": [1, 3, 4], "B": [2, 3, 5]})
print(df["A"] < df["B"])
"""
0     True
1    False
2     True
dtype: bool
"""

print(df["A"] == df["B"])
"""
0    False
1     True
2    False
dtype: bool
"""

8.3 汇总运算

8.3.1 计算总个数count

Excel

=COUNTA(区域)   # 计算指定区域内的非空单元格总数
=COUNT(区域)	  # 计算指定区域的数值型数据个数

Python

df.count(axis: 'Axis' = 0,
         numeric_only: 'bool' = False)
  • axis设置把行(0"index")计数还是把列(1"columns")计数
  • numeric_only设置只计算数值型数据行/列(int,float,bool)。
  • 返回值为一个由行名(axis=1)或列名(axis=0)作索引,各列/行的非空值组成的Series对象,

如:

df = pd.DataFrame({
    "A": [1, 3, 4, 5, 5, 6],
    "B": [2, 3, 5, None, None, 2],
    "C": ["hello", "world", 1, 2, 3, None]
},index=["一","二","三","四","五","六"])

result = df.count()
print(result)
"""
A    6
B    4
C    5
dtype: int64
"""

result = df.count(axis=1)
print(result)
"""
一    3
二    3
三    3
四    2
五    2
六    2
dtype: int64
"""

result = df.count(numeric_only=True)
print(result)
"""
A    6
B    4
dtype: int64
"""
Series.count()
  • 返回该Series对象中的非空值总个数

如:

n = df["B"].count()
print(n)
# 4

8.3.2 计算总和sum

Excel

=SUM(区域)

Python

df.sum(axis=None,
       skipna=True,
       numeric_only=None,
       min_count=0)
  • axis设置把行(0"index")求和还是把列(1"columns")求和
  • skipna设置忽略空值
  • numeric_only设置只计算数值型数据行/列(int,float,bool)。
  • min_count设置最低求和数个数。如何本列/行的数值型数据个数小于该最低求和数个数,将不会进行求和运算。
  • 返回值为一个由行名(axis=1)或列名(axis=0)作索引,各列/行的数据总和组成的Series对象,

如:

df = pd.DataFrame(
    {
        "A": [1, 3, 4, 5, 5, 6],
        "B": [2, 3, 5, 19, 20, 2],
        "C": [12, 3, None, None, None, None]
    },
    index=["一", "二", "三", "四", "五", "六"])

print(df.sum())
"""
A    24.0
B    51.0
C    15.0
dtype: float64
"""
print(df.sum(axis=1))
"""
一    15.0
二     9.0
三     9.0
四    24.0
五    25.0
六     8.0
dtype: float64
"""
print(df.sum(min_count=3))
"""
A    24.0
B    51.0
C     NaN
dtype: float64
"""
Series.sum()
  • 返回该Series对象的数据的总和

如:

s = df["B"].sum()
print(s)
# 51

8.3.3 计算算术平均数mean

python两个列表逐项相减 python两列数据相减_python两个列表逐项相减

Excel

=AVGERAGE(区域)

Python

参数和返回值类似sum()

df.mean(axis: 'int | None | lib.NoDefault' = <no_default>,
        skipna=True,
        numeric_only=None)
Series.mean()

如:

df = pd.DataFrame(
    {
        "A": [1, 3, 4, 5, 5, 6],
        "B": [2, 3, 5, 19, 20, 2],
        "C": [12, 3, None, None, None, None]
    },
    index=["一", "二", "三", "四", "五", "六"])

print(df.mean())
"""
A    4.0
B    8.5
C    7.5
dtype: float64
"""

print(df.mean(axis=1))
"""
一     5.0
二     3.0
三     4.5
四    12.0
五    12.5
六     4.0
dtype: float64
"""

print(df["B"].mean())
# 8.5

8.3.4 计算最值max min

Excel

=MAX(区域)
=MIN(区域)

Python

参数和返回值类似sum()

df.max(axis: 'int | None | lib.NoDefault' = <no_default>,
       skipna=True,
       numeric_only=None)

df.min(axis: 'int | None | lib.NoDefault' = <no_default>,
       skipna=True,
       numeric_only=None)
Series.max()
Series.min()

如:

df = pd.DataFrame(
    {
        "A": [1, 3, 4, 5, 5, 6],
        "B": [2, 3, 5, 19, 20, 2],
        "C": [12, 3, None, None, None, None]
    },
    index=["一", "二", "三", "四", "五", "六"])

print(df.max())
"""
A     6.0
B    20.0
C    12.0
dtype: float64
"""
print(df.min(axis=1))
"""
一    1.0
二    3.0
三    4.0
四    5.0
五    5.0
六    2.0
dtype: float64
"""
print(df["B"].max())
# 20

8.3.5 计算中位数median

python两个列表逐项相减 python两列数据相减_数据分析_02

Excel

=MEDIAN(区域)

Python

参数和返回值类似sum()

df.median(axis: 'int | None | lib.NoDefault' = <no_default>,
       skipna=True,
       numeric_only=None)
Series.sum()

如:

df = pd.DataFrame(
    {
        "A": [1, 3, 4, 5, 5, 6],
        "B": [2, 3, 5, 19, 20, 2],
        "C": [12, 3, None, None, None, None]
    },
    index=["一", "二", "三", "四", "五", "六"])

print(df.median())
"""
A    4.5
B    4.0
C    7.5
dtype: float64
"""
print(df.median(axis=1))
"""
一     2.0
二     3.0
三     4.5
四    12.0
五    12.5
六     4.0
dtype: float64
"""
print(df["B"].median())
# 4

8.3.6 计算众数mode

python两个列表逐项相减 python两列数据相减_python两个列表逐项相减_03

Excel

=MODE(区域)

Python

参数类似sum()

df.mode(axis: 'Axis' = 0,
        numeric_only: 'bool' = False,
        dropna: 'bool' = True)
Series.mode()
  • 众数可能会有多个的情况。故返回值为DataFrameSeries

如:

df = pd.DataFrame(
    {
        "A": [1, 3, 4, 5, 5, 6],
        "B": [2, 3, 5, 19, 20, 2],
        "C": [12, 3, None, None, None, None]
    },
    index=["一", "二", "三", "四", "五", "六"])

print(df.mode())   # C列3和12出现次数最多且相等
"""
     A    B     C
0  5.0  2.0   3.0
1  NaN  NaN  12.0
"""

print(df.mode(axis=1))
"""
     0     1     2
一  1.0   2.0  12.0
二  3.0   NaN   NaN
三  4.0   5.0   NaN
四  5.0  19.0   NaN
五  5.0  20.0   NaN
六  2.0   6.0   NaN
"""
print(df["B"].mode())
"""
0    2
Name: B, dtype: int64
"""

8.3.7 计算方差 var

python两个列表逐项相减 python两列数据相减_数据分析_04

Excel

=VAR(区域)

Python

参数和返回值类似sum()

df.var(axis: 'Axis' = 0,
       numeric_only: 'bool' = False,
       dropna: 'bool' = True)
Series.var()

如:

df = pd.DataFrame(
    {
        "A": [1, 3, 4, 5, 5, 6],
        "B": [2, 3, 5, 19, 20, 2],
        "C": [12, 3, None, None, None, None]
    },
    index=["一", "二", "三", "四", "五", "六"])

print(df.var())
"""
A     3.2
B    73.9
C    40.5
dtype: float64
"""
print(df.var(axis=1))
"""
一     37.0
二      0.0
三      0.5
四     98.0
五    112.5
六      8.0
dtype: float64
"""
print(df["B"].var())
# 73.9

8.3.8 计算标准差std

python两个列表逐项相减 python两列数据相减_数据分析_05

Excel

=STDEVP(区域)

Python

参数和返回值类似sum()

df.std(axis: 'Axis' = 0,
       numeric_only: 'bool' = False,
       dropna: 'bool' = True)
Series.std()

如:

df = pd.DataFrame(
    {
        "A": [1, 3, 4, 5, 5, 6],
        "B": [2, 3, 5, 19, 20, 2],
        "C": [12, 3, None, None, None, None]
    },
    index=["一", "二", "三", "四", "五", "六"])

print(df.std())
"""
A    1.788854
B    8.596511
C    6.363961
dtype: float64
"""
print(df.std(axis=1))
"""
一     6.082763
二     0.000000
三     0.707107
四     9.899495
五    10.606602
六     2.828427
dtype: float64
"""
print(df["B"].std())
"""
8.596510920134982
"""

8.3.9 计算分位数quantile

python两个列表逐项相减 python两列数据相减_数据分析_06

python两个列表逐项相减 python两列数据相减_数据分析_07

Excel

=PERCENTILE(区域,q)

Python

df.quantile(q=0.5,
            axis: 'Axis' = 0,
            numeric_only: 'bool' = True,
            interpolation: 'str' = 'linear')
Series.quantile(q=0.5,interpolation: 'str' = 'linear')
  • q设置分位数。默认0.5,即中位数。也可以是列表。
  • interpolation设置插值方式。假设 python两个列表逐项相减 python两列数据相减_学习_08
  • linear:取python两个列表逐项相减 python两列数据相减_学习_09
  • lower:取python两个列表逐项相减 python两列数据相减_数据分析_10
  • higher:取python两个列表逐项相减 python两列数据相减_学习_11
  • nearest:令python两个列表逐项相减 python两列数据相减_数据分析_12中离 python两个列表逐项相减 python两列数据相减_python两个列表逐项相减_13 较近者为python两个列表逐项相减 python两列数据相减_python_14,取python两个列表逐项相减 python两列数据相减_python两个列表逐项相减_15
  • midpoint:取python两个列表逐项相减 python两列数据相减_Python_16

如:

df = pd.DataFrame(
    {
        "A": [1, 3, 4, 5, 5, 6],
        "B": [2, 3, 5, 19, 20, 2],
        "C": [12, 3, None, None, None, None]
    },
    index=["一", "二", "三", "四", "五", "六"])

qdf=df.quantile([0.25,0.5,0.75])
print(qdf)
"""
         A      B     C
0.25  3.25   2.25  5.25
0.50  4.50   4.00  7.50
0.75  5.00  15.50  9.75
"""

qdf=df.quantile([0.25,0.5,0.75],interpolation="higher")
print(qdf)
"""
      A   B     C
0.25  4   3  12.0
0.50  5   5  12.0
0.75  5  19  12.0
"""

print(df["A"].quantile(0.25))
# 3.25

8.3.10 计算协方差cov

python两个列表逐项相减 python两列数据相减_数据分析_17

Excel

=COVAR(列1,列2)

Python

df.cov()
  • 返回各列之间的协方差组成的DataFrame
Series.cov(other)
  • other为另一个Series对象。
  • 返回两个Series的协方差数值

如:

df = pd.DataFrame(
    {
        "A": [1, 3, 4, 5, 5, 6],
        "B": [2, 3, 5, 19, 20, 2],
        "C": [12, 3, None, None, None, None]
    },
    index=["一", "二", "三", "四", "五", "六"])
print(df.cov())
"""
     A    B          C
A  3.5 -3.5   7.400000
B -3.5  3.5  -7.400000
C  7.4 -7.4  41.866667
"""

c=df["A"].cov(df["B"])
print(c)
"""
-3.5
"""

8.3.11 计算相关系数correl

最常见的是皮尔森相关系数:
python两个列表逐项相减 python两列数据相减_python_18

Excel

=CORREL(列1,列2)

Python

df.corr()
  • 返回各列之间的相关系数组成的DataFrame
Series.corr(other)
  • other为另一个Series对象。
  • 返回两个Series的相关系数

如:

df = pd.DataFrame(
    {
        "A": [1, 2, 3, 4, 5, 6],
        "B": [6, 5, 4, 3, 2, 1],
        "C": [12, 1,8, 10, 10, 21]
    },
    index=["一", "二", "三", "四", "五", "六"])
print(df.corr())
"""
          A         B         C
A  1.000000 -1.000000  0.611313
B -1.000000  1.000000 -0.611313
C  0.611313 -0.611313  1.000000
"""
r=df["A"].cov(corr["B"])
print(r)
# -1.0