5e30192115

缺失值处理:

现有数据:

 res.fillna() 对缺失值进行填充,可以指定value=xxx来填充  但实际不合理

 res.dropna() 删除缺失值所在的行

 res.isnull() 缺失值返回True或false

  统计列字段下是否有数据缺失: res.isnull().any(axis=0)

计算数据缺失比例:res.isnull().sum(axis = 0)/res.shape[0]

针对缺失数据不同的处理方式:

对于该表格,gender字段的缺失 可以用众数填充

res.gender.mode()运行结果如下:

进行索引取值才能填充 res.gender.mode()[0]

对于age字段 可以用平均值填充,因为年龄不受极大值或极小值的影响,否则就要用中位数

对于薪资字段 推荐使用中位数来计算,因为受极大值或极小值的影响:

整体填充的代码为:

res.fillna(value={\'gender\':res.gender.mode()[0],\'age\':res.age.mean(),\'income\':res.income.median()},inplace=True)

最后加上inplace=True 直接修改原表数据

数据汇总

透视表功能

现有数据

 

pd.pivot_table(data, values=None, index=None, columns=None, aggfunc=\'mean\', fill_value=None, margins=False, dropna=True, margins_name=\'All\')

data:指定需要构造透视表的数据集

values:指定需要写入的数值框的字段列表

index:指定需要拉入行标签的字段列表

columns:指定需要拉入列标签的字段列表

aggfunc:指定数值的统计函数,默认为统计均值,也可以指定numpy模块中的其他统计函数

fill_value:指定一个标量,用于填充缺失值

margins:bool类型参数,是否需要显示行或列的总计值,默认为False

dropna:bool类型参数,是否需要删除整列为缺失的字段,默认为True

margins_name:指定行或列的总计名称,默认为All

res.head ()如果不写参数 默认读五行

pd.pivot_table(res, index = \'color\', values=\'price\', aggfunc=\'mean\')

 也可以计算其他numpy的计算结果 例如中位数 最大值等

 

 

 

 

 

 求每个钻石的库存量:

 

 

 分组与聚合

按照颜色分组:

res.groupby(by=\'color\')

 

 

 只能获得一个对象也可以对多个对象进行分组

 

 

 对分组变量进行统计汇总:

 

 

 

 

 

 读对数据的重命名:

 

 

 练习题:

 

 

 

 

 

 将表头数据进行替换

 

 

 然后在删除第一行数据:

 

 

 获取每个球队的夺冠次数:

res1 = champion.groupby(by=\'冠军\').aggregate({\'冠军\':np.size})
res1

 

 获取每个球队的夺冠次数和球员FMVP:

res2 = champion.groupby([\'冠军\',\'FMVP\']).aggregate({\'冠军\':np.size})
res2

 

 

  获取各组冠军次数(升序/降序):

champion.groupby(\'冠军\').size().sort_values(ascending=False)  # 升序
res3=champion.groupby(\'冠军\').size().sort_values(ascending=True)  #降序

 

 

 

 

 

 分组字段可以一次性取多个:


数据的合并:

pd.concat(objs, axis=0, join=\'outer\', join_axes=None, ignore_index=False, keys=None)

objs:指定需要合并的对象,可以是序列、数据框或面板数据构成的列表 
axis:指定数据合并的轴,默认为0,表示合并多个数据的行,如果为1,就表示合并多个数据的列
join:指定合并的方式,默认为outer,表示合并所有数据,如果改为inner,表示合并公共部分的数据 
join_axes:合并数据后,指定保留的数据轴 
ignore_index:bool类型的参数,表示是否忽略原数据集的索引,默认为False,如果设为True,就表示忽略原索引并生成新索引
keys:为合并后的数据添加新索引,用于区分各个数据部分

构造数据集:

df1 = pd.DataFrame({
  \'name\':[\'张三\',\'李四\',\'王二\'], 
  \'age\':[21,25,22], 
  \'gender\':[\'\',\'\',\'\']}
)
df2 = pd.DataFrame({
  \'name\':[\'丁一\',\'赵五\'], 
  \'age\':[23,22], 
  \'gender\':[\'\',\'\']}
)

 

 

 数据集纵向合并:

pd.concat([df1,df2] , keys = [\'df1\',\'df2\']).reset_index() 

pd.concat([df1,df2] , keys = [\'df1\',\'df2\']).reset_index().drop(labels =\'level_1\', axis = 1).rename(columns = {\'level_0\':\'Class\'})

 

 

 

 

 如果df2数据集中的"姓名"变量为Name:

df2 = pd.DataFrame({
  \'Name\':[\'丁一\',\'赵五\'], 
  \'age\':[23,22], 
  \'gender\':[\'\',\'\']}
)
# 数据集的纵向合并
pd.concat([df1,df2])

结论:

concat行合并,数据源的变量名称需完全相同 
 

数据的连接:

pd.merge(left, right, how=\'inner\', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=(\'_x\', \'_y\'))

left:指定需要连接的主 right:指定需要连接的辅表
how:指定连接方式,默认为inner内连,还有其他选项,如左连left、右连right和外连outer on:指定连接两张表的共同字段
left_on:指定主表中需要连接的共同字段
right_on:指定辅表中需要连接的共同字段 
left_index:bool类型参数,是否将主表中的行索引用作表连接的共同字段,默认为False right_index:bool类型参数,是否将辅表中的行索引用作表连接的共同字段,默认为False sort:bool类型参数,是否对连接后的数据按照共同字段排序,默认为False 
suffixes:如果数据连接的结果中存在重叠的变量名,则使用各自的前缀进行区分

构造数据:

 

 

 使用到merge方法:

 

 

 然后在进行df5连接\'

merge2 = pd.merge(left = merge1, 
                  right = df5, 
                  how = \'left\')


 

数据分析三剑客之matplotlib板块

导入模块:

 

 

 饼图的绘制:

饼图属于最传统的统计图形之一,几乎随处可见,例如大型公司的屏幕墙、各种年度论坛的演示稿以及各大媒体发布的数据统计报告等;
饼图是将一个圆分割成不同大小的楔(扇)形,而圆中的每一个楔形代表了不同的类别值,通常根据楔形的面积大小来判断类别值的差异;

关键字 pie

pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, labeldistance=1.1)

x:指定绘图数据

explode:指定饼图某些部分的突出显示,即呈现爆炸式

labels:为饼图添加标签说明,类似于图例说明

colors:指定饼图的填充色

autopct:自动添加百分比显示,可以采用格式化的方法显示

pctdistance:设置百分比标签与圆心的距离

labeldistance:设置各扇形标签(图例)与圆心的距离

第一步:制作饼图

 

 第二步:添加教育水平标签 由于出现了乱码 所以一般在构造图形时会在前面加上一段代码

 

 

 

 

 

 

 


 

绘制柱状图:

虽然饼图可以很好地表达离散型变量在各水平上的差异,但其不擅长对比差异不大或水平值过多的离散型变量,因为饼图是通过各扇形面积的大小来比价差异的,面积的比较有时并不直观;
对于条形图而言,对比的是柱形的高低,柱体越高,代表的数值越大,反之亦然;
bar(x, height, width=0.8, bottom=None, color=None, edgecolor=None, tick_label=None, label = None, ecolor=None)
x:传递数值序列,指定条形图中x轴上的刻度值 
height:传递数值序列,指定条形图y轴上的高度
width:指定条形图的宽度,默认为0.8 
bottom:用于绘制堆叠条形图 
color:指定条形图的填充色 
edgecolor:指定条形图的边框色 
tick_label:指定条形图的刻度标签 
label:指定条形图的标签,一般用以添加图例
  
 
\'\'\'垂直条形图\'\'\'
import pandas as pd
# 读入数据
GDP = pd.read_excel(r\'Province GDP 2017.xlsx\')

# 设置绘图风格(不妨使用R语言中的ggplot2风格)
plt.style.use(\'ggplot\')
# 绘制条形图
plt.bar(x = range(GDP.shape[0]), # 指定条形图x轴的刻度值
        height = GDP.GDP, # 指定条形图y轴的数值
        tick_label = GDP.Province, # 指定条形图x轴的刻度标签
        color = \'steelblue\', # 指定条形图的填充色
       )
# 添加y轴的标签
plt.ylabel(\'GDP(万亿)\')
# 添加条形图的标题
plt.title(\'2017年度6个省份GDP分布\')
# 为每个条形图添加数值标签
for x,y in enumerate(GDP.GDP):
    plt.text(x,y+0.1,\'%s\' %round(y,1),ha=\'center\')
# 显示图形    
plt.show()

 

分类:

技术点:

相关文章: