--------韦访 20181005

1、概述

上一讲我们简单学习了Numpy库,这一讲我们继续学习Python的数据处理库Pandas。

2、安装Pandas库

由于系统是新装的,还没安装Pandas库,所以得先安装,执行以下命令即可,

sudo apt-get install python-pandas

3、读取CSV数据

CSV其实就是用逗号做分隔符的文本文件,可以用excel打开,打开结果如下图所示,

如果用文本工具打开,则如下图所示,

处理这种数据,肯定先得读取吧,Pandas提供了读取CSV格式的函数,代码如下,

import pandas as pdtwo_char_code = pd.read_csv('国家二字码.csv')
print('--------------------------')
print('输出列表头部:')
print(two_char_code.head())
print('--------------------------')
print('指定输出头部2行:')
print(two_char_code.head(2))
print('--------------------------')
print('指定输出尾部3行:')
print(two_char_code.tail(3))
print('--------------------------')
print('输出列表头:')
print(two_char_code.columns)
print('--------------------------')
print('输出每列的数据类型:')
print(two_char_code.dtypes)
print('--------------------------')
print('输出列表形状:')
print(two_char_code.shape)
print('--------------------------')
print('输出第4行数据(列表头不算,下标从0开始):')
print(two_char_code.loc[4])
print('--------------------------')
print('输出第4-8行数据(列表头不算,下标从0开始):')
print(two_char_code.loc[4:8])
print('--------------------------')
print('输出任意行数据:')
print(two_char_code.loc[[4,6,8]])
print('--------------------------')
print('输出一列数据:')
print(two_char_code['国家二字代码'])
print('--------------------------')
print('输出多列数据:')
print(two_char_code[['国家二字代码', '电话代码']])

运行结果,

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

输出列表头部:

国家或地区(英文名) 国家或地区(中文名) 国家二字代码  电话代码  与中国时差

0       Angola        安哥拉     AO   244   -7.0

1  Afghanistan        阿富汗     AF    93    0.0

2      Albania      阿尔巴尼亚     AL   355   -7.0

3      Algeria      阿尔及利亚     DZ   213   -8.0

4      Andorra     安道尔共和国     AD   376   -8.0

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

指定输出头部2行:

国家或地区(英文名) 国家或地区(中文名) 国家二字代码  电话代码  与中国时差

0       Angola        安哥拉     AO   244   -7.0

1  Afghanistan        阿富汗     AF    93    0.0

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

指定输出尾部3行:

国家或地区(英文名) 国家或地区(中文名) 国家二字代码  电话代码  与中国时差

190   Zimbabwe       津巴布韦     ZW   263   -6.0

191      Zaire        扎伊尔     ZR   243   -7.0

192     Zambia        赞比亚     ZM   260   -6.0

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

输出列表头:

Index(['国家或地区(英文名)', '国家或地区(中文名)', '国家二字代码', '电话代码', '与中国时差'], dtype='object')

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

输出每列的数据类型:

国家或地区(英文名)     object

国家或地区(中文名)     object

国家二字代码         object

电话代码            int64

与中国时差         float64

dtype: object

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

输出列表形状:

(193, 5)

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

输出第4行数据(列表头不算,下标从0开始):

国家或地区(英文名)    Andorra

国家或地区(中文名)     安道尔共和国

国家二字代码             AD

电话代码              376

与中国时差              -8

Name: 4, dtype: object

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

输出第4-8行数据(列表头不算,下标从0开始):

国家或地区(英文名) 国家或地区(中文名) 国家二字代码  电话代码  与中国时差

4              Andorra     安道尔共和国     AD   376   -8.0

5             Anguilla       安圭拉岛     AI  1264  -12.0

6  Antigua and Barbuda    安提瓜和巴布达     AG  1268  -12.0

7            Argentina        阿根廷     AR    54  -11.0

8              Armenia       亚美尼亚     AM   374   -6.0

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

输出任意行数据:

国家或地区(英文名) 国家或地区(中文名) 国家二字代码  电话代码  与中国时差

4              Andorra     安道尔共和国     AD   376   -8.0

6  Antigua and Barbuda    安提瓜和巴布达     AG  1268  -12.0

8              Armenia       亚美尼亚     AM   374   -6.0

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

输出一列数据:

0       AO

1       AF

2       AL

3       DZ

4       AD

5       AI

...

188     YU

189     ZA

190     ZW

191     ZR

192     ZM

Name: 国家二字代码, Length: 193, dtype: object

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

输出多列数据:

国家二字代码  电话代码

0       AO   244

1       AF    93

2       AL   355

3       DZ   213

4       AD   376

5       AI  1264

..     ...   ...

189     ZA    27

190     ZW   263

191     ZR   243

192     ZM   260

[193 rows x 2 columns]

4、排序

import pandas as pdtwo_char_code = pd.read_csv('国家二字码.csv')
print('--------------------------')
print('原排序:')
print(two_char_code['国家二字代码'])
print('--------------------------')
two_char_code.sort_values('国家二字代码', inplace=True)
print('根据国家二字代码升序排序:')
print(two_char_code['国家二字代码'])
print('--------------------------')
two_char_code.sort_values('国家二字代码', inplace=True, ascending=False)
print('根据国家二字代码降序排序:')
print(two_char_code['国家二字代码'])

运行结果,

/usr/bin/python3.5 /home/wilf/tensorflow-r1.9/demo2/Pandas/demo1.py

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

原排序:

0       AO

1       AF

2       AL

3       DZ

4       AD

5       AI

6       AG

7       AR

8       AM

9      NaN

10      AU

...

186     VN

187     YE

188     YU

189     ZA

190     ZW

191     ZR

192     ZM

Name: 国家二字代码, Length: 193, dtype: object

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

根据国家二字代码升序排序:

4       AD

180     AE

1       AF

6       AG

5       AI

2       AL

...

185     VE

186     VN

187     YE

188     YU

189     ZA

157     ZA

192     ZM

191     ZR

190     ZW

9      NaN

32     NaN

80     NaN

106    NaN

107    NaN

116    NaN

119    NaN

139    NaN

144    NaN

145    NaN

Name: 国家二字代码, Length: 193, dtype: object

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

根据国家二字代码降序排序:

190     ZW

191     ZR

192     ZM

157     ZA

189     ZA

188     YU

...

27      BF

18      BE

15      BD

16      BB

12      AZ

10      AU

11      AT

7       AR

0       AO

8       AM

2       AL

5       AI

6       AG

1       AF

180     AE

4       AD

9      NaN

32     NaN

80     NaN

106    NaN

107    NaN

116    NaN

119    NaN

139    NaN

144    NaN

145    NaN

Name: 国家二字代码, Length: 193, dtype: object

可以看到,不管是升序还是降序,NaN都是排在最后的。

5、数据预处理

接下来,我们使用机器学习中常用的“泰坦尼克号”数据源来继续学习Pandas的数据处理,数据源格式也为CSV,首先显示前几行看看大概的格式,代码如下,

import pandas as pdtitanic_train = pd.read_csv('titanic_train.csv')
print('--------------------------')
print('泰坦尼克数据格式:')
print(titanic_train.head())

运行结果,

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

泰坦尼克数据格式:

PassengerId  Survived  Pclass    ...        Fare Cabin  Embarked

0            1         0       3    ...      7.2500   NaN         S

1            2         1       1    ...     71.2833   C85         C

2            3         1       3    ...      7.9250   NaN         S

3            4         1       1    ...     53.1000  C123         S

4            5         0       3    ...      8.0500   NaN         S

[5 rows x 12 columns]

没显示全。那我截图好了,

如上图,数据包含泰坦尼克号上所有的乘员的一些信息,包括,姓名、年龄、性别、仓号等数据。

过滤缺失数据,

以“Age”为例,有些人的Age为空,那么怎么将他们过滤出来呢?代码如下,

print('--------------------------')
age = titanic_train['Age']
age_is_null = age[pd.isnull(age)]
print('无年龄人数:')
print(len(age_is_null))
print('过滤出年龄为空的人:')
print(age_is_null)

运行结果,

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

无年龄人数:

177

过滤出年龄为空的人:

5     NaN

17    NaN

19    NaN

26    NaN

28    NaN

29    NaN

31    NaN

..

846   NaN

849   NaN

859   NaN

863   NaN

868   NaN

878   NaN

888   NaN

Name: Age, Length: 177, dtype: float64

如果不处理缺失值会怎样?我们来看看,在不处理缺失值的情况下,求平均年龄,

print('--------------------------')
print('不处理缺失值的情况下,计算平均值:')
age = titanic_train['Age']
print(sum(age)/len(age))

运行结果:

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

不处理缺失值的情况下,计算平均值:

nan

运行的结果就为NaN,那就没法玩了。

处理缺失数据,

上面可知,不处理缺失数据是不行的,那么有哪些方法处理缺失数据呢?最简单的就是,直接跳过缺失数据,代码如下,

print('--------------------------')
print('跳过缺失数据:')
ages = titanic_train['Age'][pd.isnull(age) == False]
print(sum(ages)/len(ages))

运行结果:

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

跳过缺失数据:

29.69911764705882

其实,Pandas已经提供求均值的函数了,且该方法自动跳过缺失数据,代码如下,

print('--------------------------')
print('自带求均值函数:')
mean_age = titanic_train['Age'].mean()
print(mean_age)

运行结果:

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

自带求均值函数:

29.69911764705882

缺失的数据有177个,占比很大,如果因为年龄的缺失就直接丢弃,损失有点大,何不用年龄的均值进行填充呢?代码如下,

print('--------------------------')
print('以均值填充缺失值:')
mean_age = titanic_train['Age'].mean()
age = titanic_train['Age']
age_is_null = age[pd.isnull(age)]
age_is_null.fillna(mean_age, inplace=True)
print(age_is_null)

运行结果:

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

以均值填充缺失值:

5      29.699118

17     29.699118

19     29.699118

26     29.699118

28     29.699118

...

846    29.699118

849    29.699118

859    29.699118

863    29.699118

868    29.699118

878    29.699118

888    29.699118

Name: Age, Length: 177, dtype: float64

透视表pivot_table

由泰坦尼克数据集可知,一等票之间的价格不一样一样,比如同是一等票,有的要71.283元,有些要51.863元,二、三等票也是这样,那么,如想求一、二、三等票的均价怎么求呢?最直接的方法就是分别将一、二、三等票求均值,Pandas提供了更简洁的方法,代码如下,

print('--------------------------')
print('分别求一二三等票的均价:')
pclass_fare = titanic_train.pivot_table(index='Pclass', values='Fare', aggfunc=np.mean)
print(pclass_fare)

运行结果,

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

分别求一二三等票的均价:

Fare

Pclass

1       84.154687

2       20.662183

3       13.675550

也可以求和,代码如下,

print('--------------------------')
print('分别求一二三等票的和:')
pclass_fare = titanic_train.pivot_table(index='Pclass', values='Fare', aggfunc=np.sum)
print(pclass_fare)

运行结果,

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

分别求一二三等票的和:

Fare

Pclass

1       18177.4125

2        3801.8417

3        6714.6951

6、自定义函数

虽然Pandas提供了很多函数,但有时候我们还是需要使用自定义的函数,怎么办呢?上代码,

print('--------------------------')
print('自定义函数:')
def not_nan_count(column):nan_column = pd.isnull(column)nan = column[nan_column]return len(nan)
null_column = titanic_train.apply(not_nan_count)
print(null_column)

运行结果:

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

自定义函数:

PassengerId      0

Survived         0

Pclass           0

Name             0

Sex              0

Age            177

SibSp            0

Parch            0

Ticket           0

Fare             0

Cabin          687

Embarked         2

dtype: int64

如果您感觉本篇博客对您有帮助,请打开支付宝,领个红包支持一下,祝您扫到99元,谢谢~~

机器学习入门(二)数据分析处理库pandas相关推荐

  1. 01、python数据分析与机器学习实战——python数据分析处理库-Pandas

    pandas介绍 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的. Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具. panda ...

  2. 机器学习入门:准备知识笔记(pandas)之一

    参考教学笔记:2021年Python人工智能,13天机器学习入门到精通,精讲+14大案例分析(数据来源参考) pandas的优势  增强图表可读性 便捷的数据处理能力 读取文件方便 封装了Matplo ...

  3. AI常用框架和工具丨2. 数据分析处理库Pandas

    数据分析处理库Pandas,AI常用框架和工具之一.理论知识结合代码实例,希望对您有所帮助. 文章目录 环境说明 一.Pandas简介 二. Pandas中的数据结构 2.1 Series 2.2 D ...

  4. 数据分析处理库-Pandas

    Pandas (数据分析处理库) Pandas:纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具.提供了大量能使我们快速便捷地处理数据的函数和方法. 1.Pandas数据读取 1 ...

  5. 【A-003】python数据分析与机器学习实战 Python科学计算库 Pandas数据分析处理库(二)

    目录: 处理缺失数据制作透视图删除含空数据的行和列多行索引使用apply函数 本节要处理的数据来自于泰坦尼克号的生存者名单,它的数据如下: PassengerId Survived Pclass .. ...

  6. Python基础入门 (四数据分析处理库Pandas应用)

    1.Pandas简介 2.两种数据结构 3.相关操作(索引,查询,统计分析,SQL操作,对缺失值处理,excel的数据透视表功能,多层索引) 1.Pandas简介 Pandas是基于Numpy的一个开 ...

  7. python做数据处理软件_程序员用于机器学习编程的Python 数据处理库 pandas 入门教程...

    入门介绍 pandas适合于许多不同类型的数据,包括: · 具有异构类型列的表格数据,例如SQL表格或Excel数据 · 有序和无序(不一定是固定频率)时间序列数据. · 具有行列标签的任意矩阵数据( ...

  8. 【Python学习系列十二】Python库pandas之CSV导入

    Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高 ...

  9. MNIST机器学习入门(二)

    在前一个博客中,我们已经对MNIST 数据集和TensorFlow 中MNIST 数据集的载入有了基本的了解.本节将真正以TensorFlow 为工具,写一个手写体数字识别程序,使用的机器学习方法是S ...

  10. 3.python数据分析处理库pandas(学习笔记)

    1.数据的读取 import pandas food_info = pandas.read_csv("food_info.csv")#由于代码和数据是存在于同一文件夹下,所以不用指 ...

最新文章

  1. 深入了解AI加速芯片的定制数据流架构与编译器 | 公开课
  2. 网络服务-SAMBA
  3. SAP WM 如何理解使用LT0G撤销TO时系统出现的锁的标志
  4. 编写递归下降语法分析器_面试BAT必问的JVM,今天我们来说一说它类加载器的底层原理...
  5. TASKCTL敏捷调度理念的诠释
  6. 求一个字符串的前缀与另一个字符串的后缀的最大相同子串
  7. r语言将百分数化为小数_「淮南师出」教师资格/招聘小学数学:《百分数与小数的互化》...
  8. C/C++ 程序设计员应聘常见面试试题深入剖析(2)
  9. cocos2d 解密ccbi_CocosBuilder 学习笔记(3) AnimationManager 与 ccbi 文件解析
  10. 【ANSYS命令流】模型的建立相关命令(一)
  11. java初级程序员需要掌握哪些,附源代码
  12. 【论文写作】如何写出一篇好的学术论文?
  13. 使用SPSS对数据异常值进行探索分析
  14. 微信开发工具新版本黑屏的解决办法
  15. 第九届中国云计算大会讲师团探秘 ——数位院士领衔、近20个国家的学者共聚、多个行业领头人及专家参与, 共话云计算大数据生态、应用...
  16. 婚庆摄影公司网站源码搭建
  17. 骨传导耳机低频差理所当然?飞利浦A6606表示不服
  18. 猿编程python分为几个阶段_各个阶段的python学习路线?
  19. ale插件 vim_vim ale插件详情
  20. 互联网晚报 | 11/21 星期一 | 31省平均工资发布;​九城不排除重新接盘暴雪魔兽世界;iPhone14Pro发货再次延期...

热门文章

  1. 漏洞大爆光 QQ漏洞 飞秋漏洞 360浏览器劫持
  2. Hola Studio最佳实践之多边形刚体的编辑
  3. win10企业版跟win10专业版有什么区别,win10系统版本区别
  4. 没有计算机年代科学家如何计算,难倒了无数科学家的 三体问题
  5. FFMPEG视频编码 NVIDIA 和 INTEL 硬件加速 x265 8bit 和 10bit
  6. 腾讯QQ关闭所有的热键,防止冲突
  7. mysql用户域账户登录_使用本地系统帐户和域用户帐户两者区别(microsoft SQLServer2000...
  8. java vo层_java的几种对象(PO,VO,DAO,BO,POJO)解释
  9. windows7计算机用户账户,浅析win7旗舰版系统中三种系统用户账户的特点
  10. POJ1200 Crazy Search