原创 学而知不足 Python编程爱好者 2020-07-14

收录于话题

#数据分析专栏

12个



4. Pandas系列 - 基本功能和统计操作_Python


  • 一、系列基本功能

  • 二、DataFrame基本功能

  • 三、基本统计性聚合函数

    • sum()方法

    • sum()方法 - axis=1

    • mean()方法

    • std()方法 - 标准差

  • 四、汇总数据

    • 包含字符串列

  • 五、全部包含


一、系列基本功能

编号属性或方法描述
1axes返回行轴标签列表
2dtype返回对象的数据类型(dtype)
3empty如果系列为空,则返回True
4ndim返回底层数据的维数,默认定义:1
5size返回基础数据中的元素数
6values将系列作为ndarray返回
7head()返回前n行
8tail()返回最后n行

axes示例:

import pandas as pd
import numpy as np

#Create a series with 100 random numbers
>>> s = pd.Series(np.random.randn(4))
>>> s
0   -0.562959
1    1.546666
2   -0.950136
3   -0.067827
dtype: float64
 
>>> s.axes  ## 返回行轴标签列表
[RangeIndex(start=0, stop=4, step=1)]

>>> s.dtype     ## 返回对象的数据类型(dtype)
dtype('float64')

>>> s.empty ## 如果系列为空,则返回True 
False

>>> s.ndim ## 返回底层数据的维数,默认定义:1
1

>>> s.size ## 返回基础数据中的元素数
4

>>> s.values ## 将系列作为ndarray返回
array([-0.56295907,  1.54666615-0.95013554-0.06782656])

>>> s.head() ## 返回前n行
0   -0.562959
1    1.546666
2   -0.950136
3   -0.067827
dtype: float64

>>> s.tail() ## 返回最后n行
0   -0.562959
1    1.546666
2   -0.950136
3   -0.067827
dtype: float64


二、DataFrame基本功能

列出比较重要的一些方法

编号属性或方法描述
1T/tranpose()转置行和列
2axes返回一个列,行轴标签和列轴标签作为唯一的成员
3dtypes返回此对象中的数据类型(dtypes)
4empty如果NDFrame完全为空[无项目],则返回为True; 如果任何轴的长度为0
5ndim轴/数组维度大小
6shape返回表示DataFrame的维度的元组
7sizeNDFrame中的元素数
8valuesNDFrame的Numpy表示
9head()返回开头前n行
10tail()返回最后n行

sum(),mean()等聚合函数的应用


先创建个一个数据帧,然后在此基础上进行演示

import pandas as pd
import numpy as np

# Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}

# Create a DataFrame
df = pd.DataFrame(d)
print df

res:

    Age    Name  Rating
0    25     Tom    4.23
1    26   James    3.24
2    25   Ricky    3.98
3    23     Vin    2.56
4    30   Steve    3.20
5    29   Minsu    4.60
6    23    Jack    3.80
7    34     Lee    3.78
8    40   David    2.98
9    30  Gasper    4.80
10   51  Betina    4.10
11   46  Andres    3.65


三、基本统计性聚合函数

编号函数描述
1count()非空观测数量
2sum()所有值之和
3mean()所有值的平均值
4median()所有值的中位数
5mode()值的模值
6std()值的标准偏差
7min()所有值中的最小值
8max()所有值中的最大值
9abs()绝对值
10prod()数组元素的乘积
11cumsum()累计总和
12cumprod()累计乘积

注 - 由于DataFrame是异构数据结构。通用操作不适用于所有函数。

sum()方法

import pandas as pd
import numpy as np

# Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}

# Create a DataFrame
df = pd.DataFrame(d)
print df.sum()

res:

>>> print df.sum()
Age                                                     382
Name      TomJamesRickyVinSteveMinsuJackLeeDavidGasperBe...
Rating                                                44.92
dtype: object

sum()方法 - axis=1

import pandas as pd
import numpy as np

# Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}

# Create a DataFrame
df = pd.DataFrame(d)
print df.sum(axis=1)

res:

0     29.23
1     29.24
2     28.98
3     25.56
4     33.20
5     33.60
6     26.80
7     37.78
8     42.98
9     34.80
10    55.10
11    49.65
dtype: float64

mean()方法

import pandas as pd
import numpy as np

# Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}

# Create a DataFrame
df = pd.DataFrame(d)
print df.mean()

res:

Age       31.833333
Rating     3.743333
dtype: float64

std()方法 - 标准差

var() - 方差 返回数字列的Bressel标准偏差(标准差)。

import pandas as pd
import numpy as np

# Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}

# Create a DataFrame
df = pd.DataFrame(d)
print df.std()  

res:

Age       9.232682
Rating    0.661628
dtype: float64


四、汇总数据

describe()函数 :DataFrame列的统计信息

指标details
count数量
mean平均值
std标准差
min最小值
25%第一四分位数(Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字
50%中位数
75%同上类似
max最大值

import pandas as pd
import numpy as np

# Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}

# Create a DataFrame
df = pd.DataFrame(d)
print df.describe()

res:

    Age    Name  Rating
0    25     Tom    4.23
1    26   James    3.24
2    25   Ricky    3.98
3    23     Vin    2.56
4    30   Steve    3.20
5    29   Minsu    4.60
6    23    Jack    3.80
7    34     Lee    3.78
8    40   David    2.98
9    30  Gasper    4.80
10   51  Betina    4.10
11   46  Andres    3.65

<==============================
count  12.000000  12.000000
mean   31.833333   3.743333
std     9.232682   0.661628
min    23.000000   2.560000
25%    25.000000   3.230000
50%    29.500000   3.790000
75%    35.500000   4.132500
max    51.000000   4.800000

可以看到,默认情况下排除了字符串列,只统计了数字的列 那么,如果想要都包含的话,该怎么操作:

  • object - 汇总字符串列
  • number - 汇总数字列
  • all - 将所有列汇总在一起(不应将其作为列表值传递)

包含字符串列

import pandas as pd
import numpy as np

# Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}

# Create a DataFrame
df = pd.DataFrame(d)
print df
print df.describe(include=['object'])

res:

    Age    Name  Rating
0    25     Tom    4.23
1    26   James    3.24
2    25   Ricky    3.98
3    23     Vin    2.56
4    30   Steve    3.20
5    29   Minsu    4.60
6    23    Jack    3.80
7    34     Lee    3.78
8    40   David    2.98
9    30  Gasper    4.80
10   51  Betina    4.10
11   46  Andres    3.65
>>> print df.describe(include=['object'])
        Name
count      12
unique     12
top     Ricky
freq        1

五、全部包含

import pandas as pd
import numpy as np

# Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}

# Create a DataFrame
df = pd.DataFrame(d)
print df
print df. describe(include='all')

res:

    Age    Name  Rating
0    25     Tom    4.23
1    26   James    3.24
2    25   Ricky    3.98
3    23     Vin    2.56
4    30   Steve    3.20
5    29   Minsu    4.60
6    23    Jack    3.80
7    34     Lee    3.78
8    40   David    2.98
9    30  Gasper    4.80
10   51  Betina    4.10
11   46  Andres    3.65
>>> print df. describe(include='all')
             Age   Name     Rating
count   12.000000     12  12.000000
unique        NaN     12        NaN
top           NaN  Ricky        NaN
freq          NaN      1        NaN
mean    31.833333    NaN   3.743333
std      9.232682    NaN   0.661628
min     23.000000    NaN   2.560000
25%     25.000000    NaN   3.230000
50%     29.500000    NaN   3.790000
75%     35.500000    NaN   4.132500
max     51.000000    NaN   4.800000