目录

  • 1 模块一  Python与机器学习概述
    • 1.1 Python与机器学习简介
    • 1.2 发展历程
    • 1.3 基本语法
    • 1.4 帮助
    • 1.5 应用
    • 1.6 示例源代码(食品识别小小专家系统)
    • 1.7 示例代码   蜡笔小新
    • 1.8 小结
    • 1.9 Python基础教程(教&学资料)
      • 1.9.1 安装Python
      • 1.9.2 第一个python程序
      • 1.9.3 Python基础
      • 1.9.4 函数
      • 1.9.5 高级特性
      • 1.9.6 函数式编程
      • 1.9.7 模块
      • 1.9.8 面向对象编程
      • 1.9.9 面向对象高级编程
      • 1.9.10 错误、调试和测试
      • 1.9.11 IO编程
      • 1.9.12 进程和线程
      • 1.9.13 正则表达式
      • 1.9.14 常用内建模块
      • 1.9.15 常用第三方模块
      • 1.9.16 图形界面
      • 1.9.17 网络编程
      • 1.9.18 电子邮件
      • 1.9.19 访问数据库
      • 1.9.20 Web开发
      • 1.9.21 异步IO
      • 1.9.22 使用MicroPython
      • 1.9.23 实战训练(day1~~day10)
        • 1.9.23.1 Day 1 - 搭建开发环境
        • 1.9.23.2 Day 2 - 编写Web App骨架
        • 1.9.23.3 Day 3 - 编写ORM
        • 1.9.23.4 Day 4 - 编写Model
        • 1.9.23.5 Day 5 - 编写Web框架
        • 1.9.23.6 Day 6 - 编写配置文件
        • 1.9.23.7 Day 7 - 编写MVC
        • 1.9.23.8 Day 8 - 构建前端
        • 1.9.23.9 Day 9 - 编写API
        • 1.9.23.10 Day 10 - 用户注册和登录
      • 1.9.24 Day 11 - 编写日志创建页
      • 1.9.25 Day 12 - 编写日志列表页
      • 1.9.26 Day 13 - 提升开发效率
      • 1.9.27 Day 14 - 完成Web App
      • 1.9.28 Day 15 - 部署Web App
      • 1.9.29 Day 16 - 编写移动App
    • 1.10 FAQ
    • 1.11 阶段总结
  • 2 PYthon程序示例
    • 2.1 程序示例(一)初识程序
    • 2.2 程序示例(二)查看今天是今年的第几天
    • 2.3 程序示例(三)if elif else语句
    • 2.4 程序示例(四)元组,列表, 堆栈,队列
    • 2.5 程序示例(五)学玩游戏《学色彩  神魔三龟玩变色》
    • 2.6 程序示例(六)函数
    • 2.7 程序示例(七)字符串
    • 2.8 程序示例(八)文件
    • 2.9 程序示例(九)排序
    • 2.10 程序示例-机器学习中英单词翻译小专家
    • 2.11 程序示例      画花朵  &  画佩奇
    • 2.12 程序示例   华夏时钟
    • 2.13 示例:  显示图片,响声
    • 2.14 播放声音视频文件mp3、wmv、wav、m4a等)
    • 2.15 Python WEB开发技术实战
  • 3 模块2 NumPy数值计算
    • 3.1 ndarray创建与索引
    • 3.2 ndarray的基础操作
    • 3.3 ufunc
    • 3.4 小结
    • 3.5 习题与实训
  • 4 模块3   pandas基础
    • 4.1 pandas常用类
    • 4.2 DataFrame基础操作
    • 4.3 其他数据类型操作
    • 4.4 小结
    • 4.5 习题与实训
    • 4.6 练习题
  • 5 模块4 pandas进阶
    • 5.1 数据读取与写出
    • 5.2 DataFrame进阶
    • 5.3 数据准备
    • 5.4 小结
    • 5.5 习题与实训
    • 5.6 练习习题及解答(参考)
  • 6 模块5 Matplotlib基础绘图
    • 6.1 Matplotlib绘图基础
    • 6.2 分析特征关系常用图形
    • 6.3 分析特征内部数据状态常用图形
    • 6.4 小结
    • 6.5 习题与实训
  • 7 模块6 机器学习库 scikit-learn
    • 7.1 数据准备
    • 7.2 降维
    • 7.3 分类
    • 7.4 回归
    • 7.5 聚类
    • 7.6 模型选择
    • 7.7 小结
    • 7.8 习题与实训
  • 8 模块7 餐饮企业综合分析
    • 8.1 (案例)餐饮企业分析需求
    • 8.2 数据准备
    • 8.3 使用K-means算法进行客户价值分析
    • 8.4 使用决策树算法实现餐饮客户流失预测
    • 8.5 小结
    • 8.6 习题与实训
  • 9 模块8  通信运营商客户流失分析与预测
    • 9.1 通信运营商客户流失分析需求
    • 9.2 数据准备
    • 9.3 特征工程
    • 9.4 使用多层感知器算法实现通信运营商 客户流失预测
    • 9.5 小结
    • 9.6 习题与实训
  • 10 学习参考资源
    • 10.1 机器学习的通俗讲解
    • 10.2 十大机器学习算法及其应用
    • 10.3 常用机器学习算法优缺点及其应用领域
    • 10.4 轻松学会 Python turtle 绘图
    • 10.5 Python 习题库
      • 10.5.1 习题1
    • 10.6 上机操作实训库
    • 10.7 面试准备题
    • 10.8 Python 程序扩展名 及发布程序时的选择
    • 10.9 计算机Python考试大纲
    • 10.10 Python  基础知识点梳理
    • 10.11 Python常用模块大全
    • 10.12 机器学习基本术语
    • 10.13 几个机器学习的成功案例
    • 10.14 60个机器学习算法应用场景实例
  • 11 章节测验(必测)
    • 11.1 测验一
    • 11.2 测验二
    • 11.3 测验三
    • 11.4 测验四
    • 11.5 测验五
    • 11.6 测验六
    • 11.7 测验七
    • 11.8 测验八
    • 11.9 测验九
    • 11.10 测验十
    • 11.11 编程专项测验
    • 11.12 填空题专项测验
    • 11.13 判断题专项测试
    • 11.14 简答题专项测试
    • 11.15 《机器学习技术》总复习
    • 11.16 书本--习题参考解答
  • 12 综合实训项目及展示
    • 12.1 项目(一)作品展示(1)
    • 12.2 项目(一)作品展示(2)
    • 12.3 团队项目实训(必作!)
DataFrame进阶

Pandas中另一个重要的数据对象为数据框(DataFram),由多个序列按照相同的index组织在一起形成一个二维表。事实上,数据框的每一列为序列。数据框的属性包括index、列名和值。由于数据框是更为广泛的一种数据组织形式,许多外部数据文件读取到Python中大部分会采用数据框的形式进行存取,比如数据库、excel和TXT文本。同时数据框也提供了极为丰富的方法用于处理数据及完成计算任务。数据框是Python完成数据处理及分析的最重要数据结构之一,因此学会灵活运用数据框是利用Python进行数据处理及挖掘的关键环节。

下面主要介绍数据框的创建、属性、方法和数据的访问及切片等内容。

1 数据框创建

基于字典,利用Pandas库中的DataFrame函数,可以创建数据框。其中字典的键转化为列名,字典的值转化为列值,而索引为默认值,即从0开始从小到大排列。

import pandas as pd

import numpy as np

data={'a':[2,2,np.nan,5,6],'b':[‘kl’,’kl’,’kl’,np.nan,’kl’],’c’:[4,6,5,np.nan,6],’d’:[7,9,np.nan,9,8]}

df=pd.DataFrame(data)

如下图


2 数据框属性

数据框对象具有三个属性,分别为列名、索引和值。比如以上3.3.1定义的数据框df,可以通过以下示例程序获取并打印其属性结果。

print('columns= ')

print(df.columns)

print('-'*50)

print('index= ')

print(df.index)

print('-'*50)

print('values= ')

print(df.values)

输出结果为:

columns= 

Index(['a', 'b', 'c', 'd'], dtype='object')

index= RangeIndex(start=0, stop=5, step=1)

--------------------------------------------------

values= 

[[2.0 'kl' 4.0 7.0]

 [2.0 'kl' 6.0 9.0]

 [nan 'kl' 5.0 nan]

 [5.0 nan nan 9.0]

 [6.0 'kl' 6.0 8.0]]

3 数据框方法

数据框(DataFrame)作为数据处理及挖掘分析的重要基础数据结构,提供了非常丰富的方法用于数据处理及计算。下面介绍其常用的方法,包括去掉空值(nan值)、对空值(nan值)进行填充、基于字段列值进行排序、基于index进行排序、取前N行数据、删除列、数据框之间的连接、数据框转化为Numpy数组、数据导出到Excel、相关统计分析等。下面分别给出其详细的介绍。

3.1数据框方法--去掉空值    

( 1) dropna()

通过dorpna()方法,可以去掉数据集中的空值(nan值),需要注意的是原来数据集不发生改变,新数据集需要重新定义。以3.3.1定义的数据框df为例,示例代码如下:

df1=df.dropna()

执行结果如图所示(下)。


(2) fillna()

通过fillna()方法,可以对数据框中的空值(nan值)进行填充。默认情况下所有空值填充同一个元素值(数值或者字符串),也可以指定不同的列填充不同的值。以3.1定义的数据框df为例,示例代码如下:

df2=df.fillna(0)       #所有空值元素填充0

df3=df.fillna('Kl')      #所有空值元素填充kl

df4=df.fillna({'a':0,'b':'kl','c':0,'d':0})  #全部列填充

df5=df.fillna({'a':0,'b':'kl'}) #部分列填充

执行结果如图所示(下)。

3.2 数据框方法--指定的列进行排序    sort_values()

可以利用sort_values()方法,指定列按值进行排序,示例代码如下:

import pandas as pd

data={'a':[5,3,4,1,6],'b':['d','c','a','e','q'],'c':[4,6,5,5,6]}

Df=pd.DataFrame(data)

Df1=Df.sort_values('a',ascending=False)

 #默认按升序,这里设置为降序

执行结果如图所示(下)。

3.3  数据框方法—按索引进行排序   sort_index()

有时候需要对索引进行排序,这时候可以使用sort_index()方法,以前面定义的Df1为例,示例代码如下:

Df2=Df1.sort_index(ascending=False)  #默认按升序,这里设置为降序

执行结果如图所示(下)。


3.3  数据框方法—取前N行   head()

通过head(N)方法,可以取数据集中的前N行,比如取前面定义的数据框Df2中的前4行,示例代码如下:

H4=Df2.head(4);

执行结果如图所示(下)。


3.4  数据框方法—删除列   dorp()

利用dorp()方法,可以删掉数据集中的指定列。比如删除前面定义的H4中的b列,示例代码如下:

H41=H4.drop('b',axis=1) #需指定轴为1

执行结果如图所示(下)。


3.4 数据框方法—水平连接  join()

利用join()方法,可以实现两个数据框之间的水平连接,示例代码如下:

Df3=pd.DataFrame({'d':[1,2,3,4,5]})

Df4=Df.join(Df3)

执行结果如图所示(下)。


3.5  数据框方法—转换为数组    as_matrix()

可以利用as_matrix()方法,将数据框转换为Numpy数组的形式,方便程序使用,特别是数据框中的数据全为数值数据的时候更为有效。示例代码如下:

import pandas as pd

list1=['a','b','c','d','e','f']

list2=[1,2,3,4,5,6]

list3=[1.4,3.5,2,6,7,8]

list4=[4,5,6,7,8,9]

list5=['t',5,6,7,'k',9.6]

D={'M1':list1,'M2':list2,'M3':list3,'M4':list4,'M5':list5}  #定义字典D,值为字符、数值混合数据

G={'M1':list2,'M2':list3,'M3':list4}                  #定义字典G,值为纯数值数据

D=pd.DataFrame(D)                             #将字典D转化为数据框

D1=D.as_matrix()                               #将数据框D转化为Numpy数组D1

G=pd.DataFrame(G)                             #将字典G转化为数据框

G1=G.as_matrix()                               #将数据框G转化为Numpy数组G1

执行结果如图所示(下)。


而D不是纯的数值数据,转换后的Numpy数组在Spyder变量资源管理器中无法查看,但可以打印出来在控制台窗口中查看,通过print(D1)打印得到如下结果:

[['a' 1 1.4 4 't']

 ['b' 2 3.5 5 5]

 ['c' 3 2.0 6 6]

 ['d' 4 6.0 7 7]

 ['e' 5 7.0 8 'k']

 ['f' 6 8.0 9 9.6]]

因此,如果数据框中的数据为纯数值的时候,通过转换为Numpy数值数组,使用起来显得更加方便。

3.6 数据框方法—导出excel         to_excel()

Excel作为常用的数据处理软件,在日常工作中经常用到,通过to_excel()方法,可以将数据框导出到Excel文件中,比如将前面定义的D和G两个数据框导出到Excel文件中。示例代码如下:

D.to_excel('D.xlsx')

G.to_excel('G.xlsx')

执行结果如图所示(下)




3.7  数据框方法—描述统计

统计方法       可以对数据框中各列求和、求平均值或者进行描述性统计,以前面定义的Df4为例,示例代码如下:

Dt=Df4.drop('b',axis=1)   #Df4中删除b列

R1=Dt.sum()           #各列求和

R2=Dt.mean()      #各列求平均值

R3=Dt.describe()   #各列做描述性统计

结果如图所示(下)。


4. 数据框切片

(1) 利用数据框中的iloc属性进行切片

与数组切片类似,利用数据框中的iloc属性可以实现下标值或者逻辑值定位索引,并进行切片操作。假设DF为待访问或切片的数据框,则访问或者切片的数据=DF.iloc[①,②]。其中①为对DF的行下标控制,②为对DF的列下标控制,行和列下标控制通过数值列表来实现,但是需要注意的是列表中的元素不能超出DF中的最大行数和最大列数。为了更灵活地操作数据,取所有的行或者列,可以用“:”来代替实现。同时,行控制还可以通过逻辑列表来实现。以3.3中定义的df2为例,示例代码如下:

# iloc for positional indexing

c3=df2.iloc[1:3,2]

c4=df2.iloc[1:3,0:2]

c5=df2.iloc[1:3,:]

c6=df2.iloc[[0,2,3],[1,2]]

TF=[True,False,False,True,True]

c7=df2.iloc[TF,[1]]

执行结果如图所示(下)。


(2) 利用数据框中的loc属性进行切片

数据框中的loc属性则主要是基于列标签进行索引,即对列值进行筛选实现行定位,再通过指定列,从而实现数据切片操作。如果取所有列,可以用冒号来表示。切片操作获得的数据还可以筛选前N行。示例代码如下:

# loc for label based indexing

c8=df2.loc[df2['b'] == 'kl',:];

c9=df2.loc[df2['b'] == 'kl',:].head(3);

c10=df2.loc[df2['b'] == 'kl',['a','c']].head(3);

c11=df2.loc[df2['b'] == 'kl',['a','c']];

执行结果如图所示(下)。