数据分析一、 pandas库基础知识
pandas库基础知识
- 一、jupyter 代码编辑器
- 概述:Python 数据分析库介绍
- 二、pandas 库基础知识
- (1)常用的Series属性与方法:
- (2) DataFrame常用方法
- 1、Series对象
- 2.1.1、 借助列表来创建 Series 对象的方法,也就是:pd.Series(data)
- 2、 DataFrame对象
- 2.1、借助字典来创建 DataFrame 对象的方法,也就是:pd.DataFrame(data)
- 2.2 通过传入 n 维数组的方式来创建DataFrame 对象的方法
- 2.3、通过列表的形式创建DataFrame 对象
- 3、Series 对象和 DataFrame 对象的联系
- 三、用pandas库读、写文件:
- 3.1用pandas库读取和写入 Excel 文件
- 3.1.1、read_excel() 函数读取 Excel 数据
- 3.1.2、to_excel() 函数将数据写入到 Excel 文件
- 3.2用pandas库读写csv文件
- 四、数据的类型转换 astype()
- 五、数据的批量替换 replace()
一、jupyter 代码编辑器
Cell [sel] 细胞
jupyter 代码编辑器的一个代码单元,一般叫它 Cell。
Cell 是这款 jupyter 代码编辑器的主要构成要素。
代码的输入以及代码结果的输出都是在 Cell 中实现的。
Cell 一共由两个部分组成:In[] 和 Out[],即输入框和输出框。
Cell 在使用时有两个很重要的特点,第一点体现在查看变量的时候,第二点体现在变量值的传递上。查看变量值的时候,只要输入变量名就可以了。
jupyter 代码编辑器第二个特点:当前的 Cell 可以沿用之前 Cell 的运算结果,也就是变量的值是可以传递的。
下面讲解的pandas库知识点中的代码运行示例均是在 jupyter 代码编辑器环境下的示例
概述:Python 数据分析库介绍
二、pandas 库基础知识
pandas [ˈpændəz] 熊猫
pandas 库是一个专门用来解决数据分析问题的库。
pandas 库有以下两大优势:
1)速度快:快速处理大型数据集;
2)效率高:提供大量高效处理数据的函数和方法。
import pandas as pd #导入 pandas 库 简化为 pd
pandas 库提供了两种数据结构:Series 和 DataFrame,来提升操作速度和效率。
(1)常用的Series属性与方法:
s.index #查看索引
s.values #查看数值
s.isnull() #查看为空的,返回布尔型
s.sort_index() #按索引排序
s.sort_values() #按数值排序
(2) DataFrame常用方法
df.head( 5 ) #查看前5行
df.tail( 3 ) #查看后3行
df.values #查看数值
df.index #查看索引
df.shape #查看行数、列数
df.fillna(0) #将空值填充0
df.replace(1, -1) #将1替换成-1
df.isnull() #查找df中出现的空值
df.dropna() #删除空值
df.unique() #查看唯一值
df.reset_index() #修改、删除,原有索引
df.columns #查看df的列名
df.sort_values() #排序
1、Series对象
Series [ˈsɪəriːz] 系列
Series 主要由一组数据及其对应的索引组成。
在上面的例子中,我们还可以在数据的底部看到这样一行信息:dtype: object。
其中,dtype 指的是 pandas 库中的数据类型,object 就等价于之前 python 学过的字符串类型。
dtype 为 object 指的就是,Series 对象中的数据,至少有一条是字符串类型的。
pd.Series() 就是创建 Series 对象的方法。
2.1.1、 借助列表来创建 Series 对象的方法,也就是:pd.Series(data)
#创建Series对象
surname = pd.Series(['赵', '钱', '孙', '李'])
#查看surname
surname
0 赵
1 钱
2 孙
3 李
dtype: object
在这个案例中,是将一个列表:[‘赵’, ‘钱’, ‘孙’, ‘李’],传给了参数 surname。
当我们将列表传给参数 data 之后,在默认情况下,pd.Series(data) 会自动为列表中的每一个元素分配对应的数字索引。
默认索引是从 0 开始,以 0, 1, 2, 3,… 的形式按序分配给列表中的元素。
Series 对象应用示例,把temp_list1 = [1, 2, 3, 4]
temp_list2 = [5, 6, 2, 3] 2个列表中的元素一一对应相加
1、 用之前学过的列表、循环等知识来解决这个问题
# 创建两个原始列表
temp_list1 = [1, 2, 3, 4]
temp_list2 = [5, 6, 2, 3]
# 创建新列表 temp_list_new
temp_list_new = []
# 将两个原始列表的元素之和添加进 temp_list_new
for i in range(len(temp_list1)):temp_list_new.append(temp_list1[i] + temp_list2[i])
# 查看新列表 temp_list_new
temp_list_new 返回:[6, 8, 5, 7]
2、用 Series 对象中的方法来求这个新列表。
# 创建两个原始列表
temp_list1 = [1, 2, 3, 4]
temp_list2 = [5, 6, 2, 3]
# 创建新的 Series 对象
temp_s = pd.Series(temp_list1) + pd.Series(temp_list2)
# 查看 temp_s
temp_s
终端:
0 6
1 8
2 5
3 7
dtype: int64
2、 DataFrame对象
Data-- [ˈdeɪtə] – 数据 , frame – [freɪm]–框架
2.1、借助字典来创建 DataFrame 对象的方法,也就是:pd.DataFrame(data)
DataFrame对象是一种表格型的数据结构,包含行索引、列索引以及一组数据。
图示:
创建 DataFrame 对象的方法是:pd.DataFrame()
DataFrame 对象的参数可以是字典,示例:
# 创建 DataFrame 对象
new_df = pd.DataFrame({'年龄': [23, 22, 21],'岗位': ['客服', '运营', '公关'],'年购买量': [10, 15, 8]})
# 查看 new_df
new_df
当我们给参数 传入字典的时候,字典的键会变成 DataFrame 对象的列索引,字典的键所对应的值会变成 DataFrame 对象的数据,行索引则默认是 0, 1, 2,…
字典中的键所对应的值的长度必须是一样的
上图中,new_df 中,年龄、岗位以及年购买量这三个键所对应的值长度都为 3,各键所对的值的长度如果不相等,就意味着数据是长短不一的,这样的字典如果传给了参数data,则会报错。字典的各键值长度一定要相等。
2.2 通过传入 n 维数组的方式来创建DataFrame 对象的方法
columns-- [ˈkɒləmz] --柱
# 创建DataFrame对象
import numpy as np
class_df2 = pd.DataFrame(np.array([[25, '女'],[18, '女'],[23, '女'],[18, '男']]),columns = ['年龄', '性别'],index = [1, 2, 3, 4])
# 查看 class_df2
class_df2
#终端:年龄 性别
1 25 女
2 18 女
3 23 女
4 18 男
2.3、通过列表的形式创建DataFrame 对象
以嵌套列表作为数据传入时,列表的元素会作为 DataFrame 对象的行数据显示,且会为数据默认生成从 0 开始的列名,也可以借助 DataFrame() 类的参数 columns 来设置列名。例:
In [ 8 ]
1 # 设置列表
2 students_info = [['小蓝', '语文', '79'],
3['小邱', '数学', '83'],
4['小李', '英语', '92']]
5
6
# 使用列表创建 DataFrame 对象,同时设置列名。
7 students_df = pd.DataFrame(students_info, columns=['姓名', '科目', '分数'])
8 students_df
对于已创建好的 DataFrame 对象,也可以修改列名,如:
students_df.columns = [ ‘分数’,‘姓名’, ‘科目’]
,
3、Series 对象和 DataFrame 对象的联系
DataFrame 对象可以被看作是由 Series 对象所组成的。
# 提取'年龄'这一列数据
class_df['年龄']
----------------------
0 25
1 18
2 23
3 18
Name: 年龄, dtype: int64
#通过 DataFrame['列索引'] 这个方法提取出来的数据,是一个 Series 对象!
# 查看'年龄'这一列数据的类型
type(class_df['年龄'])
---------------------
终端:pandas.core.series.Series
果然,提取出来的年龄这一列数据是一个 Series 对象!
同理,提取其它列的数据也会返回 Series 对象。
思维导图
三、用pandas库读、写文件:
3.1用pandas库读取和写入 Excel 文件
3.1.1、read_excel() 函数读取 Excel 数据
read_excel() 函数,它可以以 DataFrame 格式读取 Excel 文件的数据,并返回一个 DataFrame 对象
1)参数 io 传入的是 Excel 文件路径或文件对象。例如 ‘test.xlsx’;
2)参数 sheet_name 传入的是 Excel 文件的工作表名称,默认为第一个工作表 ‘Sheet1’。
例:
import pandas as pd
# 打开【成绩单.xlsx】工作簿,并获取【1 班】工作表的数据
data_1 = pd.read_excel('./工作/成绩单.xlsx', sheet_name='1 班')
data_1
3.1.2、to_excel() 函数将数据写入到 Excel 文件
to_excel() 函数可以以 DataFrame 格式将数据写入到 Excel 文件。
1)参数 excel_writer 同样传入的是 Excel 文件路径或文件对象;
2)参数 sheet_name 有些不同,传入的是新建 Excel 文件的工作表名称,默认为新建工作表 ‘Sheet1’;
3)参数 index 用于决定是否在写入时加上数据的行索引,默认为 True,即往文件中写入行索引。设置为 False 则不写入行索引。
代码示例:
如果想要创建一个工作表名为【2 班】的工作簿【新成绩单.xlsx】,并将创建的 DataFrame 数据写入到该工作表
1 # 创建一个 DataFrame 对象的数据
2 data_2 = pd.DataFrame({'学号':[1, 2, 3], '性别':['男', '男', '女'], '年龄':['17', '17', '16'], '总分':['285', '273', '240']})
3 # 将数据写入到【新成绩单.xlsx】工作簿中的【2 班】工作表
4 data_2.to_excel('新成绩单.xlsx', sheet_name='2 班', index=False)
上方代码中,将 to_excel() 函数的参数 index 设置为 False,目的是不把行索引也写入到工作簿中。因为 Excel 表中默认有行索引。如果数据的行索引在工作簿中不具备参考价值,建议不写入到工作簿中。
3.2用pandas库读写csv文件
pandas 库为读取各种文件类型的数据提供了非常简便高效的方法。
pd.read_csv(path, encoding) 就是其中一种高效读取 csv 文件的方法,返回的是一个 DataFrame 对象。
这个方法有很多参数,这里先介绍两种最常用的:path,encoding
对于参数 path,需要传一个文件路径给它。可以是相对路径,也可以是绝对路径。
对于参数 encoding,需要传一个文件编码格式给它。文件编码格式的选取需要根据所读文件的编码格式来定。
代码示例–导入或读取文件:
# 导入 csv 数据
my_data = pd.read_csv('./工作/mask_data.csv', encoding = 'utf-8')
查看数据----只需要输入变量名就可以查看变量的值了:
# 查看 my_data
my_data
查相结果示例:
从底部的数据中可以发现,总行数是 101942,总列数是 6
写入函数为:to_csv() 方法与to_excel() 类似
四、数据的类型转换 astype()
type---[taɪp]---类型;种类
假如有一个 DataFrame 对象的数据是这样的:
英语分数为字符串类型
In [ 9 ]
1 # 创建一个 DataFrame 对象的数据
2 data_5 = pd.DataFrame({'姓名':['林某某', '许放羊', '王鱼'], '语文': [87, 82, 67], '数学':[73, 85, 90], '英语':['89', '95', '95']})
3 data_5
运行
Out [ 9 ]姓名 语文 数学 英语
0 林某某 87 73 89
1 许放羊 82 85 95
2 王鱼 67 90 95
如果想要新建一个【总分】列,用来存储每个人三门科目的总分。
data_5[‘总分’] = data_5[‘语文’] + data_5[‘数学’] + data_5[‘英语’]
运行后程序会报错,因为【英语】列的数据为字符串类型,与其它两列的数据类型不一致。这就要求我们调整【英语】列的数据类型,使得三列的数据类型都为整数或者浮点型,才能进行求和操作。
astype() 方法中的参数 dtype, 我们可以为其赋上需要的数据类型,如 int、str 等。
由于参数 dtype 是 astype() 方法的第一个位置参数,所以我们在使用时无需写为 astype(dtype=int),可以直接写为 astype(int)。
已知【英语】列的数据类型为字符串类型,其它两列的数据类型为整数型。那只需要将【英语】列的数据类型转换为整数型。
代码示例:
In [ 11 ]
1 # 计算每个人三门科目的总分
2 data_5['总分'] = data_5['语文'] + data_5['数学'] + data_5['英语'].astype(int)
3 data_5
运行
Out [ 11 ]姓名 语文 数学 英语 总分
0 林某某 87 73 89 249
1 许放羊 82 85 95 262
2 王鱼 67 90 95 252
五、数据的批量替换 replace()
replace--- [rɪˈpleɪs] ---代替
有时我们读取数据时,会发现数据里存在一些错误信息。如下图中的“山头市”:
为了确保数据的准确性,我们需要对这些错别字进行批量修改,替换为正确的内容。
例:
In [ 15 ]
1 # 创建一个 DataFrame 对象的数据
2 data_7 = pd.DataFrame({'性别':['难', '女', '难', '女', '女'],
3'城市':['.', '潮州市', '山头市', '汕尾市', '山头市'],
4'年龄':[25, 26, 24, 25, 26],
5 '爱好':['蓝球', '跑步', '跳舞', '逛街', '读书']})
6 data_7
运行
Out [ 15 ]性别 城市 年龄 爱好
0 难 . 25 蓝球
1 女 潮州市 26 跑步
2 难 山头市 24 跳舞
3 女 汕尾市 25 逛街
4 女 山头市 26 读书
将上方数据中【城市】列的值“山头市”,以及【爱好】列的值“蓝球”,分别替换为“汕头市”、“篮球”。
先设置一个字典 fix_typo = {‘山头市’:‘汕头市’, ‘蓝球’:‘篮球’},再将该字典放入 replace() 方法里,具体实现代码如下:
In [ 62 ]
1 # 定义字典 fix_typo
2 fix_typo = {'山头市':'汕头市', '蓝球':'篮球'}
3 # 对【城市】、【爱好】列的错字进行修改
4 data_7 = data_7.replace(fix_typo)
5 data_7
运行
Out [ 62 ]性别 城市 年龄 爱好
0 男 未知 25 篮球
1 女 潮州市 26 跑步
2 男 汕头市 24 跳舞
3 女 汕尾市 25 逛街
4 女 汕头市 26 读书
上方的代码会根据 replace() 内的参数内容,对整个 DataFrame 对象的数据进行批量替换。
如果只想对指定某一列的数据进行替换,比如只替换【城市】列的数据,代码如下:
In [ 18 ]
1 # 定义字典 fix_typo
2 fix_typo = {'山头市':'汕头市', '蓝球':'篮球'}
3 # 对【城市】列的错字进行修改
4 data_7['城市'] = data_7['城市'].replace(fix_typo)
5 data_7
运行
Out [ 18 ]性别 城市 年龄 爱好
0 难 . 25 蓝球
1 女 潮州市 26 跑步
2 难 汕头市 24 跳舞
3 女 汕尾市 25 逛街
4 女 汕头市 26 读书
从运行结果可以看到,【爱好】列的“蓝球”没有被修改为“篮球”,原因是我们只指定【城市】列,所以其它列的数据不会被替换。
小结:
数据分析一、 pandas库基础知识相关推荐
- Python 数据分析与展示笔记4 -- Pandas 库基础
Python 数据分析与展示笔记4 – Pandas 库基础 Python 数据分析与展示系列笔记是笔者学习.实践Python 数据分析与展示的相关笔记 课程链接: Python 数据分析与展示 参考 ...
- pandas库基础学习
pandas库基础学习 1.Pandas模块的数据结构 Pandas模块的数据结构主要有两种: Series DataFrame Series 是一维数组,基于Numpy的ndarray 结构 Dat ...
- Python数据分析之Pandas库
Python数据分析之Pandas库 一.Pandas简介 二.Pandas库的安装 三.Pandas的数据结构 四.Series 和 DataFrame 数据结构的使用 五.其他可以参考的网站 一. ...
- 艺赛旗(RPA) Pandas 类库基础知识
艺赛旗 RPA8.0全新首发免费下载 点击下载 http://www.i-search.com.cn/index.html?from=line1 详细内容请参看艺赛旗官网支持栏目:RPA社区 点击链接 ...
- Python系列 之 matplotlib库 基础知识
Python系列 之 matplotlib库 基础知识学习 Pyplot 简单示例 中文显示问题 注册全局字体 font_manager.FontProperties注册字体 Figure Figur ...
- 【入门】数据分析必备——统计学入门基础知识
↑↑↑关注后"星标"简说Python 人人都可以简单入门Python.爬虫.数据分析 简说Python推荐来源:木木自由 作者:小陌One old watch, like brie ...
- Turtle库与Time库基础知识分享(详细)
Turtle库与Time库基础知识分享(详细) 认识turtle库: turtle库是turtle绘图体系的Python实现,是标准库之一 标准库:随解释器操作系统中的模块直接安装到解释器中的并且可以 ...
- 计算机操作员 国家题库,计算机操作员中最新国家题库基础知识部分.doc
计算机操作员中最新国家题库基础知识部分 第1章 信息技术原理概述PAGE PAGE 22国家职业资格培训教程配套辅导练习第一章 信息技术原理概述计算机的概念.分类及应用1.信息革命的概念 迄今为止,人 ...
- 数据分析必备——SQL入门基础知识
数据说·梦想季 一直很喜欢一句话:山鸟与鱼不同路,从此山水不相逢.意思就是如果你现在不够优秀,即使遇见了,也不配拥有-...努力是唯一的方向! // 导读:科学技术的快速发展正在改变我们的社会,也在不 ...
最新文章
- 学习webpack记录(三)
- Clonezilla制作镜像时报错:extfsclone.c:bitmap free count err解决办法
- java打印 a b c,创建一个java程序,按顺序给出3个术语作为输入(a,b,c)打印它们的根...
- PMCAFF高端俱乐部首次集结,最顶级产品人的私密俱乐部!
- 002 python准备做题的一些准备
- [蓝桥杯][2013年第四届真题]核桃的数量-枚举(水题)
- 解开Future的神秘面纱之任务执行
- 2018安卓应用安全白皮书:超98%安卓应用存有安全风险
- 陈国良院士将出席“首届对象存储技术与应用大会”
- 非常好用的php单文件在线文件管理器微网盘系统 万维景盛优化版
- SPSS调节效应分析插件 v1.1.1
- 【PM】产品需求文档PRD的一般格式
- matlab 投影法,梯度投影法 MATLAB程序可执行
- win7系统下,手机投屏到电脑
- 服务器局域网无法访问共享文件夹,科学网—局域网共享文件夹不能访问 - 陈芳林的博文...
- 计算机文字录入培训大纲,计算机文字录入处理员教学大纲.doc
- Qt报错:cc1plus.exe: out of memory allocating 65536 bytes
- Firefly-rk3288 开发板Linux系统编译
- 推荐一个好用的PDF阅读器
- layui tree支持搜索
热门文章
- redis 存储数组和对象
- #乐观是最好的算法?
- 如何理性地看待减半行情
- 好程序员大前端送干货Web前端开发框架汇总
- 上海边检部门全力护航浦东机场货运渠道
- windows c++ 修改用户的文件夹操作权限
- Acwing语法基础课第八次课(2)756. 蛇形矩阵748. 数组的右下半部分754. 平方矩阵 II752. 数组的右方区域 746. 数组的左下半部分750. 数组的下方区域
- c4d的语言是方框,怎么用C4D制作爆炸小方块
- 台式电脑无法自动修复此计算机怎么办,电脑无法自动修复此计算机咋办
- VS 2017 众多重构插件