数据分析模块pandas和matplotlib补充

  • 面向百度式编程
  • 面向百度式工作

遇到没有见过的知识点或者是相关知识点一定不要慌,结合百度和已知的知识点去学习

pandas模块补充

  • 基于numpy构建的

  • 奠定了python数据分析领域的地位

  • 两大数据结构

    Series

    DataFrame

  • 读取和导出相关文件

文件命名

  1. 1.一旦软件出现了未知错误
  2. 有可能就是因为路径是中文的情况
  3. 推荐你们项目文件和软件目录的命名最好都用英文

简介

  1. 基于Numpy构建
  2. pandas的出现,让Python语言成为使用最广泛而且强大的数据分析环境之一
  3. pandas的主要功能
  4. - 具备诸多功能的两大数据结构
  5. SeriesDataFrame
  6. 都是基于Numpy构建出来的
  7. 公司中使用频繁的是DataFrame,而Series是构成DataFrame的基础,即一个DataFrame可能由NSeries构成
  8. - 集成时间序列功能
  9. - 提供丰富的数学运算和操作(基于Numpy)
  10. - 灵活处理缺失数据

下载

  1. # python纯开发环境下
  2. pip3 install pandas
  3. # anaconda环境下
  4. conda install pandas
  5. '''anaconda已经自动帮助我们下载好了数据分析相关的模块,其实无需我们再下载'''

导入

  1. import pandas as pd
  2. # 固定起别名的句式

课程目标

  1. 1. 掌握外部数据的读取
  2. 2. 如何快速地认知数据的概览信息
  3. 3. 数据子集的筛选与清洗
  4. 4. 数据的汇总处理
  5. 5. 数据的合并与连接

数据结构之Series

  1. # 是一种类似于一维数组对象,由数据和相关的标签(索引)组成
  2. 第一种:
  3. pd.Series([4,5,6,7,8])
  4. 第二种:
  5. pd.Series([4,5,6,7,8],index=['a','b','c','d','e'])
  6. 第三种:
  7. pd.Series({"a":1,"b":2})
  8. 第四种:
  9. pd.Series(0,index=['a','b','c'])

缺失数据概念

  1. st = {"tony":18,"yang":19,"bella":20,"cloud":21}
  2. obj = pd.Series(st)
  3. # 定义新索引
  4. new_st = {'tony','yang','cloud','jason'}
  5. # 修改原索引
  6. obj1 = pd.Series(st,index=a)
  7. # 查看数据变化
  8. obj1
  9. 小疑问:为什么运算完之后数据类型会由原来的int64变成float64
  10. 因为NaN其实是float类型
  11. type(np.nan)
  12. 结果是:float

处理缺失数据

  1. dropna() # 过滤掉值为NaN的行
  2. fillna() # 填充缺失数据
  3. isnull() # 返回布尔数组
  4. notnull() # 返回布尔数组
  5. 补充:
  6. 对数据进行处理返回一个新的结果原数据不变,如果想要直接影响原数据需要加参数inplace=True

布尔选择器

  1. mask = pd.Series([True,False,False,True,False])
  2. price = pd.Series([321312,123,324,5654,645])
  3. price[mask]
  4. price|mask
  5. price&mask
  6. (price>200) & (price<900)
  7. price[(price>200) & (price<900)] # 布尔求值

索引

  1. res[1]
  2. res['cd']
  3. res.index
  4. sr = pd.Series(np.arange(10))
  5. sr1 = sr[3:].copy()
  6. sr1[1] # 报错
  7. sr1.iloc[1] # 以索引下标解释
  8. sr1.loc[3] # 以标签解释

数据操作

  1. res = pd.Series([...])
  2. res['aaa'] = 666
  3. res.iloc[0] = 888
  4. res.append(pd.Series([999],index=['cd']))
  5. res.set_value('cd',6969)
  6. del res['cd']

基本算术方法

  1. """
  2. add
  3. sub
  4. div
  5. mul
  6. """
  7. sr1 = pd.Series([12,23,34], index=['c','a','d'])
  8. sr3 = pd.Series([11,20,10,14], index=['d','c','a','b'])
  9. sr1.add(sr3,fill_value=0)

数据结构之DataFrame

  1. 表格型数据结构,相当于一个二维数组,含有一组有序的列也可以看作是由Series组成的共用一个索引的字典
  2. 第一种:
  3. res = pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
  4. 第二种:
  5. pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3],index=['b','a','c'])})
  6. 第三种:
  7. pd.DataFrame(np.array([10,20],[30,40]),index=['a','b'],columns=['c1','c2'])
  8. 更多
  9. pd.DataFrame([np.arange(1,8),np.arange(11,18)])
  10. s1 = pd.Series(np.arange(1,9,2))
  11. s2 = pd.Series(np.arange(2,10,2))
  12. s3 = pd.Series(np.arange(5,7),index=[1,2])
  13. df5 = pd.DataFrame({'c1':s1,'c2':s2,'c3':s3})
  14. """
  15. 以上创建方式都仅仅做一个了解即可
  16. 因为工作中dataframe的数据一般都是来自于读取外部文件数据,而不是自己手动去创建
  17. """

常用属性及方法

  1. 1.index 行索引
  2. 2.columns 列索引
  3. 3.T 转置
  4. 4.values 值索引
  5. 5.describe 快速统计

外部数据读取

文本文件读取

  1. pd.read_csv(filepath_or_buffer, sep=‘,', header='infer', names=None, usecols=None, skiprows=None, skipfooter=None, converters=None, encoding=None)
  2. filepath_or_buffer:指定txt文件或csv文件所在的具体路径
  3. sep:指定原数据集中各字段之间的分隔符,默认为逗号”,”
  4. id name income
  5. 1 jason 10
  6. header:是否需要将原数据集中的第一行作为表头,默认将第一行用作字段名称
  7. 如果原始数据没有表头需要将该参数设置为None
  8. names:如果原数据集中没有字段,可以通过该参数在数据读取时给数据框添加具体的表头
  9. usecols:指定需要读取原数据集中的哪些变量名
  10. skiprows:数据读取时,指定需要跳过原数据集开头的行数
  11. 有一些表格开头是有几行文字说明的,读取的时候应该跳过
  12. skipfooter:数据读取时,指定需要跳过原数据集末尾的行数
  13. converters:用于数据类型的转换(以字典的形式指定)
  14. encoding:如果文件中含有中文,有时需要指定字符编码

基本使用

  1. import pandas as pd
  2. data01 = pd.read_csv(r'data_test01.txt',
  3. skiprows = 2, # python能自动过滤掉完全无内容的空行(写2、3都行)
  4. sep = ',', # 默认就是逗号 写不写都行
  5. skipfooter = 3,
  6. )
  7. # 1.针对id原本是01、02自动变成了1、2...
  8. converters = {'id':str}
  9. # 2.点击文件另存修改文件编码之后再次读取出现乱码
  10. encoding='utf-8'
  11. # 3.移除收入千分位非逗号的其他符号
  12. thousands = '&'
  13. # 4.手动将文件表头行删除再次读取
  14. header = None # 默认用索引
  15. names = ['id','year','month','day','gender','occupation','income']
  16. # 5.指定读取的字段
  17. usecols = ['id','income']
  18. """
  19. 查看方法帮助
  20. 方式1
  21. 方法名?
  22. 方式2
  23. 光标停留在方法名左括号后面
  24. 先按住shift键不松开,再按tab键(没反应就多按几次)
  25. """

excel表格读取

  1. pd.read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None, names=None,
  2. na_values=None, thousands=None, convert_float=True)
  3. io:指定电子表格的具体路径
  4. sheetname:指定需要读取电子表格中的第几个Sheet,既可以传递整数也可以传递具体的Sheet名称
  5. header:是否需要将数据集的第一行用作表头,默认为是需要的
  6. skiprows:读取数据时,指定跳过的开始行数
  7. skip_footer:读取数据时,指定跳过的末尾行数
  8. index_col:指定哪些列用作数据框的行索引(标签)
  9. na_values:指定原始数据中哪些特殊值代表了缺失值
  10. thousands:指定原始数据集中的千分位符
  11. convert_float:默认将所有的数值型字段转换为浮点型字段
  12. converters:通过字典的形式,指定某些列需要转换的形式
  13. pd.read_excel(r'data_test02.xlsx',
  14. header = None,
  15. names = ['ID','Product','Color','Size'],
  16. converters = {'ID':str}
  17. )

数据库数据读取

  1. # 在anaconda环境下直接安装
  2. # pymysql模块
  3. import pymysql
  4. conn = pymysql.connect(host,port,user,password, database, charset)
  5. host:指定需要访问的MySQL服务器
  6. port:指定访问MySQL数据库的端口号 charset:指定读取MySQL数据库的字符集,如果数据库表中含有中文,一般可以尝试将该参数设置为 utf8”或“gbk
  7. user:指定访问MySQL数据库的用户名
  8. password:指定访问MySQL数据库的密码
  9. database:指定访问MySQL数据库的具体库名
  10. # 利用pymysql创建好链接MySQL的链接之后即可通过该链接操作MySQL
  11. pd.read_sql('select * from user', con = conn)
  12. conn.close() # 关闭链接

数据概览

  1. df.columns # 查看列
  2. df.index # 查看行
  3. df.shape # 行列
  4. df.dtypes # 数据类型
  5. df.describe # 统计描述
  6. 默认只会统计数字类型的数据,非数字类型统计需要加参数include
  7. sec_buildings.describe(include='object')
  8. df.head() # 取头部多条数据
  9. df.tail() # 取尾部多条数据

行列操作

  1. df.rename(column={'旧列名称':'新列名称'},inplace=True)
  2. # 能修改 但是会报个错误 可以添加下列配置
  3. pd.set_option('mode.chained_assignment',None)
  4. # 创建新的列
  5. df['新列名称']=df.列名称/(df.列名称1+df.列名称2)
  6. # 自定义位置
  7. df.insert(3,'新列名称',新数据)
  8. # 添加行
  9. df3 = df1.append(df2)

数据筛选

  1. # 获取指定列数据
  2. df['列名']
  3. df[['列名1','列名2',...]]
  4. # 获取指定行数据
  5. sec_buildings.loc[sec_buildings["region"] == '浦东',:]
  6. sec_buildings.loc[(sec_buildings["region"] == '浦东') & (sec_buildings['size'] > 150),:]
  7. sec_buildings.loc[(sec_buildings["region"] == '浦东') & (sec_buildings['size'] > 150),['name','tot_amt','price_unit']]
  8. """知识回顾:逻辑运算符链接条件 条件最好用括号括起来"""

数据处理

  1. sec_car = pd.read_csv(r'sec_cars.csv')
  2. sec_car.head()
  3. sec_car.dtypes
  4. sec_car.Boarding_time = pd.to_datetime(sec_car.Boarding_time, format = '%Y年%m月')
  5. sec_car.New_price = sec_car.New_price.str[:-1].astype(float)
  6. data = pd.read_excel(r'data_test04.xlsx')
  7. data.head()
  8. data.duplicated() # 判断是否有重复行
  9. 如果想单独判断某列是否有重复需要加参数subset
  10. data.drop_duplicates(inplace= True)

异常值识别与处理

  1. 异常值的识别与处理
  2. 1. Z得分法
  3. 2. 分位数法
  4. 3. 距离法

缺失值处理

  1. 缺失值的识别与处理
  2. 1. df.isnull
  3. 2. df.fillna
  4. 3. df.dropna
  5. data05 = pd.read_excel(r'data_test05.xlsx')
  6. data05.head()
  7. data05.isnull() # 统计每个数据项是否有缺失
  8. data05.isnull().any(axis = 0) # 统计列字段下是否含有缺失
  9. # 计算各列数据的缺失比例
  10. data05.isnull().sum(axis = 0)/data05.shape[0]
  11. data05.dropna()
  12. data05.fillna(value=0) # 将所有的缺失值填充为0(不合理)
  13. # 针对不同的缺失值使用合理的填充手段
  14. data05.fillna(value = {
  15. 'gender':data05.gender.mode()[0], # 众数:可以有一个也可能是多个
  16. 'age':data05.age.mean(), # 平均值
  17. 'income':data05.income.median() # 中位数
  18. }, inplace = True)

pandas模块补充的更多相关文章

  1. pandas模块(很详细归类),pd.concat(后续补充)

    6.12自我总结 一.pandas模块 import pandas as pd约定俗称为pd 1.模块官方文档地址 https://pandas.pydata.org/pandas-docs/stab ...

  2. 开发技术--pandas模块

    开发|pandas模块 整了一篇关于pandas模块的使用文章,方便检查自己的学习质量.自从使用了pandas之后,真的是被它的功能所震撼~~~ 前言 目前所有的文章思想格式都是:知识+情感. 知识: ...

  3. [Python]-pandas模块-机器学习Python入门《Python机器学习手册》-02-加载数据:加载文件

    <Python机器学习手册--从数据预处理到深度学习> 这本书类似于工具书或者字典,对于python具体代码的调用和使用场景写的很清楚,感觉虽然是工具书,但是对照着做一遍应该可以对机器学习 ...

  4. 文成小盆友python-num7 -常用模块补充 ,python 牛逼的面相对象

    本篇内容: 常用模块的补充 python面相对象 一.常用模块补充 1.configparser模块 configparser 用于处理特定格式的文件,起内部是调用open()来实现的,他的使用场景是 ...

  5. python之pandas模块

    一.pandas模块是基于Numpy模块的,pandas的主要数据结构是Series和DadaFrame,下面引入这样的约定: from pandas import Series,DataFrame ...

  6. Python 数据处理扩展包: numpy 和 pandas 模块介绍

    一.numpy模块 NumPy(Numeric Python)模块是Python的一种开源的数值计算扩展.这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list str ...

  7. 关于Python pandas模块输出每行中间省略号问题

    关于Python数据分析中pandas模块在输出的时候,每行的中间会有省略号出现,和行与行中间的省略号....问题,其他的站点(百度)中的大部分都是瞎写,根本就是复制黏贴以前的版本,你要想知道其他问题 ...

  8. Pandas模块

    前言: 最近公司有数据分析的任务,如果使用Python做数据分析,那么对Pandas模块的学习是必不可少的: 本篇文章基于Pandas 0.20.0版本 话不多说社会你根哥!开干! pip insta ...

  9. pandas模块实现小爬虫功能-转载

    pandas模块实现小爬虫功能 安装 pip3 install pandas 爬虫代码 import pandas as pd df = pd.read_html("http://www.a ...

随机推荐

  1. python代码加注释--6

    备注:#用来注释代码,#后面的内容会被python解释器忽略

  2. Python初学笔记之可变类型、不可变类型

    python中 可变类型: 列表 list 字典 dict 不可变类型: 数字型:int.float.complex.bool.long 字符型 str 元组 tuple id(i):通过id查看变量 ...

  3. poj_3190

    首先把所有的牛排个序,优先按照起始时间 其次建立一个堆,重载小于号(只可以重载小于号),优先按照右端点的时间排序,大的放下面(sort的时候会放后面),堆顶是结束时间最快的 #include < ...

  4. ApacheCN Python 译文集(二)20211110 更新

    Python 应用计算思维 零.序言 第一部分:计算思维导论 一.计算机科学基础 二.计算思维要素 三.理解算法和算法思维 四.理解逻辑推理 五.探究性问题分析 六.设计解决方案和解决流程 七.识别解 ...

  5. NOIP2017 Day2T3 列队

    首先可以观察到这样一个事实,如果 \((x, y)\) 出队,那么只会影响 \(x\) 这一行,以及最后一列的排布.并且可以发现,每次一个人出队,总会对最后一列有影响,因此我们可能需要将最后一列单独拿 ...

  6. linux 批量替换文件内容及查找某目录下所有包含某字符串的文件

    转载请注明来源:https://www.cnblogs.com/hookjc/ 1. sed C代码   grep -rl matchstring somedir/ | xargs sed -i 's ...

  7. 取消a标签的默认行动(跳转到href)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 学习jsp篇:jsp简单实例之一注册

    编程环境:IDEA,Tomcat ,JavaEE 实例一.注册 1.先在IDEA建一个web工程(不懂的可以在网上搜,一大堆..)ServletTest,在工程目录下的web目录建一个文件夹regis ...

  9. 直接引入vue.js和使用vue脚手架的区别?

    脚手架工具搭建的项目是把Vue作为一个模块(如CommonJS规范的模块)对待,在源码中引入vue模块,最终需要用构建工具(如webpack)载入模块,编写代码需要require('vue'). 而直 ...

  10. 列出ubuntu软件管理工具apt的一些用法(自由总结)

    安装软件包 [root@CentOS7 ~]#apt install tree 删除软件包 [root@CentOS7 ~]# apt remove tree 列出仓库软件包 [root@CentOS ...