pandas统计分析(下)——数据计算

  • Post author:
  • Post category:其他




数据计算

pandas中具有大量的数据计算函数,比如求和、求平均值、求最大值、最小值、中位数、众数、方差、标准差等。



求和(sum)函数

DataFrame.sum(axis = None,skipna = None,level = None,numeric_only = None,min_count = 0,**kwargs)

参数说明:

  • axis:axis = 1表示行,axis = 0表示列,默认为None(无)
  • skipna:布尔型,表示计算结果是否排除NaN/Null值,默认值为None
  • level:表示索引层级,默认为None
  • numeric_only:仅数字,布尔型,默认值为None
  • min_count:表示执行操作所需的数目,整型,默认为0
  • **kwargs:要传递给函数的附加关键字参数。
  • 返回值:返回Series对象或DataFrame对象。行或列求和数据
import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
data = [[110,105,99],[105,88,115],[109,120,130]]
index = [1,2,3]
columns =['语文','数学','英语']
df = pd.DataFrame(data = data,index = index,columns=columns)

df['总成绩']=  df.sum(axis = 1)
print(df)

语文 数学 英语 总成绩

1 110 105 99 314

2 105 88 115 308

3 109 120 130 359



求均值(mean函数)

mean(axis=None, skipna=None, level=None, numeric_only=None, **kwargs)

参数说明:

  • axis:axis = 1表示行,axis = 0表示列,默认为None(无)
  • skipna:布尔型,表示计算结果是否排除NaN/Null值,默认值为None
  • level:表示索引层级,默认为None
  • numeric_only:仅数字,布尔型,默认值为None
  • min_count:表示执行操作所需的数目,整型,默认为0
  • **kwargs:要传递给函数的附加关键字参数。
  • 返回值:返回Series对象或DataFrame对象。行或列平均值数据
import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
data = [[110,105,99],[105,88,115],[109,120,130],[112,115]]
index = [1,2,3,4]
columns =['语文','数学','英语']
df = pd.DataFrame(data = data,index = index,columns=columns)
new = df.mean()
#增加一行数据(语文、数学和英语的平均值,忽略索引)
df = df.append(new,ignore_index=True)
print(df)
    语文   数学        英语
0  110.0  105.0   99.000000
1  105.0   88.0  115.000000
2  109.0  120.0  130.000000
3  112.0  115.0         NaN
4  109.0  107.0  114.666667



最大值(max函数)

max(axis=None, skipna=None, level=None, numeric_only=None, **kwargs)

参数说明:

  • axis:axis = 1表示行,axis = 0表示列,默认为None(无)
  • skipna:布尔型,表示计算结果是否排除NaN/Null值,默认值为None
  • level:表示索引层级,默认为None
  • numeric_only:仅数字,布尔型,默认值为None
  • min_count:表示执行操作所需的数目,整型,默认为0
  • **kwargs:要传递给函数的附加关键字参数。
  • 返回值:返回Series对象或DataFrame对象。行或列最大值数据
import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
data = [[110,105,99],[105,88,115],[109,120,130],[112,115]]
index = [1,2,3,4]
columns =['语文','数学','英语']
df = pd.DataFrame(data = data,index = index,columns=columns)
new = df.max()
#增加一行数据(语文、数学和英语的最大值,忽略索引)
df = df.append(new,ignore_index=True)
print(df)
    语文   数学   英语
0  110.0  105.0   99.0
1  105.0   88.0  115.0
2  109.0  120.0  130.0
3  112.0  115.0    NaN
4  112.0  120.0  130.0



最小值(min函数)

min(axis=None, skipna=None, level=None, numeric_only=None, **kwargs)

参数说明:

  • axis:axis = 1表示行,axis = 0表示列,默认为None(无)

  • skipna:布尔型,表示计算结果是否排除NaN/Null值,默认值为None

  • level:表示索引层级,默认为None

  • numeric_only:仅数字,布尔型,默认值为None

  • min_count:表示执行操作所需的数目,整型,默认为0

  • **kwargs:要传递给函数的附加关键字参数。

  • 返回值:返回Series对象或DataFrame对象。行或列最小值数据

    import pandas as pd
    pd.set_option('display.unicode.east_asian_width',True)
    data = [[110,105,99],[105,88,115],[109,120,130],[112,115]]
    index = [1,2,3,4]
    columns =['语文','数学','英语']
    df = pd.DataFrame(data = data,index = index,columns=columns)
    new = df.min()
    #增加一行数据(语文、数学和英语的最小值,忽略索引)
    df = df.append(new,ignore_index=True)
    print(df)
    
        语文   数学   英语
    0  110.0  105.0   99.0
    1  105.0   88.0  115.0
    2  109.0  120.0  130.0
    3  112.0  115.0    NaN
    4  105.0   88.0   99.0
    



中位数(median函数)

中位数又叫作中值,按顺序排列的一组数据中位于中间位置的数,其不受异常值的影响。

median(axis=None, skipna=None, level=None, numeric_only=None, **kwargs)

参数说明:

  • axis:axis = 1表示行,axis = 0表示列,默认为None(无)
  • skipna:布尔型,表示计算结果是否排除NaN/Null值,默认值为None
  • level:表示索引层级,默认为None
  • numeric_only:仅数字,布尔型,默认值为None
  • min_count:表示执行操作所需的数目,整型,默认为0
  • **kwargs:要传递给函数的附加关键字参数。
  • 返回值:返回Series对象或DataFrame对象。行或列中位数数据
import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
data = [[110,105,99],[105,88,115],[109,120,130],[112,115]]
index = [1,2,3,4]
columns =['语文','数学','英语']
df = pd.DataFrame(data = data,index = index,columns=columns)
new = df.median()
#增加一行数据(语文、数学和英语的中位数,忽略索引)
df = df.append(new,ignore_index=True)
print(df)
    语文   数学   英语
0  110.0  105.0   99.0
1  105.0   88.0  115.0
2  109.0  120.0  130.0
3  112.0  115.0    NaN
4  109.5  110.0  115.0



求众数(mode函数)

众数就是一组数据中出现最多的数,代表了数据的一般水平。

mode(axis=0, numeric_only=False, dropna=True)

参数说明:

  • axis:axis = 1表示行,axis = 0表示列,默认为None(无)
  • numeric_only:仅数字,布尔型,默认值为None
  • drop_na:是否删除缺失值,布尔型,默认为True
  • 返回Series对象或DataFrame对象。
import pandas as pd
data = [[110,120,110],[130,130,130],[130,120,130]]
columns = ['语文','数学','英语']
df = pd.DataFrame(data = data ,columns=columns)
print(df.mode())#三科成绩的众数
print(df.mode(axis = 1))#每一行的众数
print(df['数学'].mode())#'数学'成绩的众数

    语文   数学   英语
0  130  120  130
     0
0  110
1  130
2  130
0    120
dtype: int64



方差(var函数)

方差是用来反映数据的离散程度的,是各组数据与他们平均数的差的平方,方差越小越稳定。

var(axis=None, skipna=None, level=None, ddof=1, numeric_only=None, **kwargs)

参数说明:

  • axis:axis = 1表示行,axis = 0表示列,默认为None(无)
  • skipna:布尔型,表示计算结果是否排除NaN/Null值,默认值为None
  • level:表示索引层级,默认为None
  • ddof:整型,默认值为1.自由度,计算中使用的除数是N-ddof,其中N表示元素的数量。
  • numeric_only:仅数字,布尔型,默认值为None
  • **kwargs:要传递给函数的附加关键字参数。
  • 返回值:返回Series对象或DataFrame对象。
import pandas as pd
data = [[110,113,102,105,108],[118,98,119,85,118]]
index = ['小黑','小白']
columns = ['物理1','物理2','物理3','物理4','物理5']
df = pd.DataFrame(data = data,index = index,columns=columns)
print(df.var(axis = 1))
小黑     18.3
小白    237.3
dtype: float64



标准差(std函数)

标准差是方差的平方根,用来表示数据的离散程度。

std(axis=None, skipna=None, level=None, ddof=1, numeric_only=None, **kwargs)

参数与var一样。

import pandas as pd
data = [[110,120,110],[130,130,130],[130,120,130]]
columns = ['语文','数学','英语']
df = pd.DataFrame(data = data ,columns=columns)
print(df.std())
语文    11.547005
数学     5.773503
英语    11.547005
dtype: float64



分位数(quantile函数)

分位数是以概率依据将数据分割为几个等分,常用的有中位数(即二分位数)、四分位数、百分位数等。

quantile(q=0.5, axis=0, numeric_only=True, interpolation='linear')

参数说明:

  • q:浮点型或数组,默认为0.5(50%分位数),其值为0~1

  • axis:axis = 1表示行,axis = 0表示列,默认为None(无)

  • numeric_only:仅数字,布尔型,默认值为True

  • interpolation:内插值,可选参数,用于指定要使用的插值方法,当期望的分位数为数据点i~j时。

    • 线性:i+(j-i)*分数,其中分数是指数被i和j包围的小数部分。
    • 较低:i
    • 较高:j
    • 最近:i或j二者以最近者为准
    • 中点:(i+j)/2
  • 返回值:返回Series对象或DataFrame对象。

import pandas as pd
#创建DataFrame数据(数学成绩)
data = [120,89,98,78,65,102,112,56,79,45]
columns  = ['数学']
df = pd.DataFrame(data = data,columns=columns)
#计算35%的分位数
x = df['数学'].quantile(0.35)
#输出淘汰
print(df[df['数学']<=x])
import pandas as pd
#创建DataFrame数据(数学成绩)
data = [120,89,98,78,65,102,112,56,79,45]
columns  = ['数学']
df = pd.DataFrame(data = data,columns=columns)
#计算35%的分位数
x = df['数学'].quantile(0.35)
#输出淘汰
print(df[df['数学']<=x])
   数学
3  78
4  65
7  56
9  45
import pandas as pd
df = pd.DataFrame({'A':[1,2],
                  'B':[pd.Timestamp('2019'),
                      pd.Timestamp('2020')],
                  'C':[pd.Timedelta('1 days'),
                      pd.Timedelta('2 days')]})
#计算日期、时间和时间增量数据的分位数
print(df.quantile(0.5,numeric_only=False))
A                    1.5
B    2019-07-02 12:00:00
C        1 days 12:00:00
Name: 0.5, dtype: object



版权声明:本文为m17635262186原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。