机器学习入门(二)数据分析处理库pandas
--------韦访 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相关推荐
- 01、python数据分析与机器学习实战——python数据分析处理库-Pandas
pandas介绍 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的. Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具. panda ...
- 机器学习入门:准备知识笔记(pandas)之一
参考教学笔记:2021年Python人工智能,13天机器学习入门到精通,精讲+14大案例分析(数据来源参考) pandas的优势 增强图表可读性 便捷的数据处理能力 读取文件方便 封装了Matplo ...
- AI常用框架和工具丨2. 数据分析处理库Pandas
数据分析处理库Pandas,AI常用框架和工具之一.理论知识结合代码实例,希望对您有所帮助. 文章目录 环境说明 一.Pandas简介 二. Pandas中的数据结构 2.1 Series 2.2 D ...
- 数据分析处理库-Pandas
Pandas (数据分析处理库) Pandas:纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具.提供了大量能使我们快速便捷地处理数据的函数和方法. 1.Pandas数据读取 1 ...
- 【A-003】python数据分析与机器学习实战 Python科学计算库 Pandas数据分析处理库(二)
目录: 处理缺失数据制作透视图删除含空数据的行和列多行索引使用apply函数 本节要处理的数据来自于泰坦尼克号的生存者名单,它的数据如下: PassengerId Survived Pclass .. ...
- Python基础入门 (四数据分析处理库Pandas应用)
1.Pandas简介 2.两种数据结构 3.相关操作(索引,查询,统计分析,SQL操作,对缺失值处理,excel的数据透视表功能,多层索引) 1.Pandas简介 Pandas是基于Numpy的一个开 ...
- python做数据处理软件_程序员用于机器学习编程的Python 数据处理库 pandas 入门教程...
入门介绍 pandas适合于许多不同类型的数据,包括: · 具有异构类型列的表格数据,例如SQL表格或Excel数据 · 有序和无序(不一定是固定频率)时间序列数据. · 具有行列标签的任意矩阵数据( ...
- 【Python学习系列十二】Python库pandas之CSV导入
Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高 ...
- MNIST机器学习入门(二)
在前一个博客中,我们已经对MNIST 数据集和TensorFlow 中MNIST 数据集的载入有了基本的了解.本节将真正以TensorFlow 为工具,写一个手写体数字识别程序,使用的机器学习方法是S ...
- 3.python数据分析处理库pandas(学习笔记)
1.数据的读取 import pandas food_info = pandas.read_csv("food_info.csv")#由于代码和数据是存在于同一文件夹下,所以不用指 ...
最新文章
- 深入了解AI加速芯片的定制数据流架构与编译器 | 公开课
- 网络服务-SAMBA
- SAP WM 如何理解使用LT0G撤销TO时系统出现的锁的标志
- 编写递归下降语法分析器_面试BAT必问的JVM,今天我们来说一说它类加载器的底层原理...
- TASKCTL敏捷调度理念的诠释
- 求一个字符串的前缀与另一个字符串的后缀的最大相同子串
- r语言将百分数化为小数_「淮南师出」教师资格/招聘小学数学:《百分数与小数的互化》...
- C/C++ 程序设计员应聘常见面试试题深入剖析(2)
- cocos2d 解密ccbi_CocosBuilder 学习笔记(3) AnimationManager 与 ccbi 文件解析
- 【ANSYS命令流】模型的建立相关命令(一)
- java初级程序员需要掌握哪些,附源代码
- 【论文写作】如何写出一篇好的学术论文?
- 使用SPSS对数据异常值进行探索分析
- 微信开发工具新版本黑屏的解决办法
- 第九届中国云计算大会讲师团探秘 ——数位院士领衔、近20个国家的学者共聚、多个行业领头人及专家参与, 共话云计算大数据生态、应用...
- 婚庆摄影公司网站源码搭建
- 骨传导耳机低频差理所当然?飞利浦A6606表示不服
- 猿编程python分为几个阶段_各个阶段的python学习路线?
- ale插件 vim_vim ale插件详情
- 互联网晚报 | 11/21 星期一 | 31省平均工资发布;​九城不排除重新接盘暴雪魔兽世界;iPhone14Pro发货再次延期...
热门文章
- 漏洞大爆光 QQ漏洞 飞秋漏洞 360浏览器劫持
- Hola Studio最佳实践之多边形刚体的编辑
- win10企业版跟win10专业版有什么区别,win10系统版本区别
- 没有计算机年代科学家如何计算,难倒了无数科学家的 三体问题
- FFMPEG视频编码 NVIDIA 和 INTEL 硬件加速 x265 8bit 和 10bit
- 腾讯QQ关闭所有的热键,防止冲突
- mysql用户域账户登录_使用本地系统帐户和域用户帐户两者区别(microsoft SQLServer2000...
- java vo层_java的几种对象(PO,VO,DAO,BO,POJO)解释
- windows7计算机用户账户,浅析win7旗舰版系统中三种系统用户账户的特点
- POJ1200 Crazy Search