· 数据结构分析 · · 统计计算与描述 · 层次化索引 · ·数据排序

· 统计计算与描述 · 层次化索引 · 读写数据操作·

1.掌握 数据结构分析,索引操作及高级索引2.掌握 算术运算与数据对齐,数据排序

3.掌握 统计计算与描述 ,层次化索引4.掌握 读写数据操作

01    Pandas的数据结构分析02    Pandas索引操作及高级索引03    算术运算与数据对齐04    数据排序05    统计计算与描述06    层次化索引07    读写数据操作

Pandas中有两个主要的数据结构:Series和DataFrame。一维的数据结构。二维的、表格型的数据结构。

Series是一个类似一维数组的对象,它能够保存任何类型的数据,主要由一组数据和与之相关的索引两部分构成。

Pandas的Series类对象可以使用以下构 造方法创建:class pandas.Series(data = None,index = None,dtype = None, name = None,copy = False,fastpath = False)data:表示传入的数据。  index:表示索引,唯一且与数据长度相等,默认会自动创建一个从0~N的整数索引。

通过传入一个列表来创建一个Series类对象:# 创建Series类对象 ser_obj = pd.Series([1, 2, 3, 4, 5])# 创建Series类对象,并指定索引 ser_obj = pd.Series([1, 2, 3, 4, 5],                  index=['a', 'b', 'c', 'd', 'e'])

除了使用列表构建Series类对象外,还可以使用dict进行构建。year_data = {2001: 17.8, 2002: 20.1, 2003: 16.5} ser_obj2 = pd.Series(year_data)

为了能方便地操作Series对象中的索引和数据,所以该对象提供了两个属性index和values分别进行获取。# 获取ser_obj的索引 ser_obj.index # 获取ser_obj的数据 ser_obj.values

当某个索引对应的数据进行运算以后,其运算的结果会替换原数据,仍然与这个索引保持着对应的关系。ser_obj * 2

DataFrame是一个类似于二维数组或表格(如excel)的对象,它每列的数据可以是不同的数据类型。 注意: DataFrame的索引不仅有行索引,还有列索引,数据可以有多列。

Pandas的DataFrame类对象可以使用以下构造方法创建:

Pandas的DataFrame类对象可以使用以下构造方法创建:Pandas的DataFrame类对象可以使用以下构造方法创建:index:表示行标签。若不设置该参数,则默认会自动创建一个从0~N的整数索引。 columns:列标签。

DataFrame在获取DataFrame的一列数据时,推荐使用列索引的方式完成,主要是因为在实际使用中,列索引的名称中很有可能带有一些特殊字符(如空格),这时使用“点字符”进行访问就显得不太合适了。

要想为DataFrame增加一列数据,则可以通过给列索引或者列名称赋值的方式实现。# 增加No4一列数据 df_obj['No4'] = ['g', 'h']要想删除某一列数据,则可以使用del语句实现。# 删除No3一列数据 del df_obj['No3']

Pandas中的索引都是Index类对象,又称为索引对象,该对象是不可以进行修改的,以保障数据的安全。

Pandas还提供了很多Index的子类,常见的有如下几种: (1)Int64Index:针对整数的特殊Index对象。 (2)MultiIndex:层次化索引,表示单个轴上的多层索引。 (3)DatetimeIndex:存储纳秒寄时间戳。如果新索引中没有原索引数据,那么程序不仅不会报错,而且会添加新的索引,并将值填充为NaN或者使用fill_vlues()填充其他值。

如果不想填充为NaN,则可以使用fill_value参数来指定缺失值。ser_obj.reindex(['a', 'b', 'c', 'd', 'e', 'f'],                                   fill_value = 6)

Series有关索引的用法类似于NumPy数组的索引,只不过Series的索引值不只是整数。如果我们希望获取某个数据,既可以通过索引的位置来获取,也可以使用索引名称来获取。ser_obj = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e']) ser_obj[2]    # 使用索引位置获取数据 ser_obj['c']   # 使用索引名称获取数据

# 通过不连续位置索引获取数据集 ser_obj[[0, 2, 4]] # 通过不连续索引名称获取数据集 ser_obj[['a', 'c', 'd']]

虽然DataFrame操作索引能够满足基本数据查看请求,但是仍然不够灵活。为此,Pandas库中提供了操作索引的方法来访问数据,具体包括:loc:基于标签索引(索引名称),用于按标签选取数据。当执行切片操作时,既包含起始索引,也包含结束索引。 iloc:基于位置索引(整数索引),用于按位置选取数据。当执行切片操作时,只包含起始索引,不包含结束索引。

Pandas执行算术运算时,会先按照索引进行对齐,对齐以后再进行相应的运算,没有对齐的位置会用NaN进行补齐。

Pandas中按索引排序使用的是sort_index()方法,该方法可以用行索引或者列索引进行排序。sort_index(axis = 0,level = None,ascending = True,inplace = False,kind =' quicksort ',na_position ='last',sort_remaining = True )axis:轴索引,0表示index(按行),1表示columns(按列)。  level:若不为None,则对指定索引级别的值进行排序。  ascending:是否升序排列,默认为True表示升序。

按索引对Series进行分别排序,示例如下。ser_obj = pd.Series(range(10, 15), index=[5, 3, 1, 3, 2]) # 按索引进行升序排列 ser_obj.sort_index() # 按索引进行降序排列 ser_obj.sort_index(ascending = False)

按索引对DataFrame进行分别排序,示例如下。df_obj = pd.DataFrame(np.arange(9).reshape(3, 3),                index=[4, 3, 5]) # 按行索引升序排列 df_obj.sort_index() # 按行索引降序排列 df_obj.sort_index(ascending=False)

在DataFrame中,sort_values()方法可以根据一个或多个列中的值进行排序,但是需要在排序时,将一个或多个列的索引传递给by参数才行。df_obj = pd.DataFrame([[0.4, -0.1, -0.3, 0.0],                                       [0.2, 0.6, -0.1, -0.7],                                       [0.8, 0.6, -0.5, 0.1]]) # 对列索引值为2的数据进行排序 df_obj.sort_values(by=2)

Pandas为我们提供了非常多的描述性统计分析的指标方法,比如总和、均值、最小值、最大值等。

如果希望一次性输出多个统计指标,则我们可以调用describe()方法实现,语法格式如下。describe(percentiles=None, include=None, exclude=None)

percentiles:输出中包含的百分数,位于[0,1]之间。如果不设置该参数,则默认为[0.25,0.5,0.75],返回25%,50%,75%分位数。

思考: 什么是层次化索引?前面所涉及的Pandas对象都只有一层索引结构,又称为单层索引,层次化索引可以理解为单层索引的延伸,即在一个轴方向上具有多层索引。

对于两层索引结构来说,它可以分为内层索引和外层索引。

Series和DataFrame均可以实现层次化索引,最常见的方式是在构造方法的index参数中传入一个嵌套列表。mulitindex_series = pd.Series([15848,13472,12073.8,7813,                                                    7446,6444,15230,8269],                              index=[['河北省','河北省','河北省','河北省',                                            '河南省','河南省','河南省','河南省'],                                           ['石家庄市','唐山市','邯郸市','秦皇岛市',                                            '郑州市','开封市','洛阳市','新乡市']])

在创建层次化索引对象时,嵌套函数中两个列表的长度必须是保持一致的,否则将会出现ValueError错误。

还可以通过MultiIndex类的方法构建一个层次化索引,该类提供了3种创建层次化索引的方法:MultiIndex.from_tuples():将元组列表转换为MultiIndex。 MultiIndex.from_arrays():将数组列表转换为MultiIndex。 MultiIndex.from_product():从多个集合的笛卡尔乘积中创建一个MultiIndex。

from_arrays()方法是将数组列表转换为MultiIndex对象,其中嵌套的第一个列表将作为外层索引,嵌套的第二个列表将作为内层索引。multi_array = MultiIndex.from_arrays(arrays =[['A', 'B', 'A', 'B', 'B'],                                                                               ['A1', 'A2', 'B1', 'B2', 'B3']],                                                                 names=['外层索引','内层索引'])

from_product()方法表示从多个集合的笛卡尔乘积中创建一个MultiIndex对象。numbers = [0, 1, 2] colors = ['green', 'purple'] multi_product = pd.MultiIndex.from_product(iterables=[numbers, colors],                            names=['number', 'color'])

在数学中,两个集合X和Y的笛卡尓积,又称直积,表示为X × Y,第一个对象是X的成员,而第二个对象是Y的所有可能有序对的其中一个成员 。 假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

根据书籍统计表,创建一个具有多层索引的Series对象,示例如下:ser_obj = Series([50, 60, 40, 94, 63, 101, 200, 56, 45],                             index=[['小说', '小说', '小说',                                           '散文随笔', '散文随笔', '散文随笔',                                    '传记', '传记', '传记'],                                  ['高山上的小邮局', '失踪的总统', '绿毛水怪',                                    '皮囊', '浮生六记', '自在独行',                                    '梅西', '老舍自传', '库里传']])

假设当前只知道书名为“自在独行”,但所属的类别和销售数量并不清楚,则需要操作内层索引获取该书籍的类别与销售数量。# 获取内层索引对应的数据 ser_obj[:,'自在独行']

在Pandas中,交换分层顺序的操作可以使用swaplevel()方法来完成。# 交换外层索引与内层索引位置 ser_obj.swaplevel()

交换分层顺序是指交换外层索引和内层索引的位置。

在使用sort_index()方法排序时,会优先选择按外层索引进行排序,然后再按照内层索引进行排序。

在进行数据分析时,通常不会将需要分析的数据直接写入到程序中,这样不仅造成程序代码臃肿,而且可用率很低。常用的解决方法是将待分析的数据存储到本地中,之后再对存储文件进行读取。

CSV文件是一种纯文本文件,可以使用任何文本编辑器进行编辑,它支持追加模式,节省内存开销。

to_csv()方法的功能是将数据写入到CSV文件中。to_csv(path_or_buf=None,sep=',',na_rep='',float_format=None,columns=None,header=True, index=True, index_label=None, mode='w‘, ...)

path_or_buf:文件路径。 index:默认为True,若设为False,则将不会显示索引。 sep:分隔符,默认用“,”隔开。

read_csv()函数的作用是将CSV文件的数据读取出来,转换成DataFrame对象展示。

read_csv(filepath_or_buffer,sep=',', delimiter=None, header='infer', names=None, index_col=None, usecols=None, prefix=None, ...)

sep:指定使用的分隔符,默认用“,”分隔。 header:指定行数用来作为列名。 names:用于结果的列名列表。如果文件不包含标题行,则应该将该参数设置为None。

to_excel()方法的功能是将DataFrame对象写入到Excel工作表中。to_excel(excel_writer,sheet_name='Sheet1',na_rep='', float_format=None, columns=None, header=True, index=True, ...)excel_writer:表示读取的文件路径。 sheet_name:表示工作表的名称,默认为“Sheet1”。 na_rep:表示缺失数据。 index:表示是否写行索引,默认为True。read_excel()函数的作用是将Excel中的数据读取出来,转换成DataFrame展示。pandas.read_excel(io,sheet_name=0,header=0,names=None,index_col=None, **kwds)io:表示路径对象。 sheet_name:指定要读取的工作表,默认为0。 header:用于解析DataFrame的列标签。 names:要使用的列名称。

为了高效地读取数据库中的数据,这里需要引入SQLAlchemy。SQLAlchemy是使用Python编写的一款开源软件,它提供的SQL工具包和对象映射工具能够高效地访问数据库。在使用SQLAlchemy时需要使用相应的连接工具包。

Pandas的io.sql模块中提供了常用的读写数据库函数。

read_sql()函数既可以读取整张数据表,又可以执行SQL语句。pandas.read_sql(sql,con,index_col=None,coerce_float=True,params=None,parse_dates=None, columns=None, chunksize=None)sql:表示被执行的SQL语句。 con:接收数据库连接,表示数据库的连接信息。 columns:从SQL表中选择列名列表。

to_sql()方法的功能是将Series或DataFrame对象以数据表的形式写入到数据库中。to_sql(name,con,schema = None,if_exists ='fail',index = True,index_label = None,chunksize = None,dtype = None )name:表示数据库表的名称。 con: 表示数据库的连接信息。 if_exists:可以取值为fail、replace或append,默认为’fail’。

本章主要针对Pandas库的基础内容进行了介绍,包括常用的数据结构、索引操作、算术运算、数据排序、统计计算与描述、层次化索引和读写数据操作等,并结合北京高考分数线的分析案例,讲解如何使用Pandas操作数据。 通过对本章的学习,希望大家可以用Pandas实现简单地操作,为后续深入地学习打好扎实的基础。

第3章 数据分析工具Pandas相关推荐

  1. 数据分析工具Pandas

    数据分析工具Pandas 数据分析工具Pandas 01 Pandas的数据结构分析 Series DataFrame 02 Pandas索引操作及高级索引 索引对象 03 算术运算与数据对齐 算术运 ...

  2. 数据分析工具Pandas(7):数据清洗、合并、转化和重构

    数据分析工具Pandas(1):Pandas的数据结构 数据分析工具Pandas(2):Pandas的索引操作 数据分析工具Pandas(3):Pandas的对齐运算 数据分析工具Pandas(4): ...

  3. 数据分析工具Pandas(6):Pandas统计计算和描述

    数据分析工具Pandas(1):Pandas的数据结构 数据分析工具Pandas(2):Pandas的索引操作 数据分析工具Pandas(3):Pandas的对齐运算 数据分析工具Pandas(4): ...

  4. 数据分析工具Pandas(4):Pandas的函数应用

    数据分析工具Pandas(1):Pandas的数据结构 数据分析工具Pandas(2):Pandas的索引操作 数据分析工具Pandas(3):Pandas的对齐运算 数据分析工具Pandas(4): ...

  5. 数据分析工具Pandas(3):Pandas的对齐运算

    数据分析工具Pandas(1):Pandas的数据结构 数据分析工具Pandas(2):Pandas的索引操作 数据分析工具Pandas(3):Pandas的对齐运算 Pandas的对齐运算 是数据清 ...

  6. 数据分析工具Pandas(2):Pandas的索引操作

    数据分析工具Pandas(1):Pandas的数据结构 数据分析工具Pandas(2):Pandas的索引操作 Pandas的索引操作 索引对象Index 1. Series和DataFrame中的索 ...

  7. 【Pandas】数据分析工具Pandas的基本操作和可视化工具Matplotlib

    1.Pandas简介 pandas是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的 ...

  8. Python数据处理035:结构化数据分析工具Pandas之Pandas概览

    Pandas是做数据分析最核心的一个工具.我们要先了解数据分析,才能更好的明白Pandas,因此,本文分为三个部分: 1.数据分析 2.Pandas概述 3.Pandas安装anaconda 文章目录 ...

  9. 数据分析工具Pandas(1):Pandas的数据结构

    Pandas Pandas的名称来自于面板数据(panel data)和Python数据分析(data analysis). Pandas是一个强大的分析结构化数据的工具集,基于NumPy构建,提供了 ...

最新文章

  1. 前端:20个 CSS 快速提升技巧
  2. .NET/C# 获取一个正在运行的进程的命令行参数
  3. select count(*) from返回的类型_数据分析面试题类型汇总
  4. 大白话,讲编程。前端君又回来了!
  5. yolov3目标检测android,目标检测 | YOLOv3训练自己的数据全流程
  6. E20180327-hm
  7. anaconda+python3.7安装keras_win10 python3.7 Anaconda3 安装tensorflow+Keras
  8. mysqldump实现数据备份及灾难恢复
  9. URL vs URI
  10. 第四季-专题5-内核模块开发
  11. 送起来oracle,十一,送你 51 个 Oracle 常用语句~
  12. 80套微信朋友圈小游戏源码分享
  13. 【汇编语言】纯汇编语言编写打飞机小游戏
  14. python四级是什么水平_四级能过的水平大概什么水平?
  15. Python挑战游戏( PythonChallenge)闯关之路Level- 3
  16. 使用sqlplus创建表空间
  17. linux安装tomcat
  18. ping 域名显示 Ping request could not find host 但是nsloo
  19. 【AD16】PCB过孔盖油
  20. c++ 实现雷霆战机可视化小游戏

热门文章

  1. 在线客服——各第三方的收费标准及服务提供
  2. 关于Optical Zoom
  3. 阿里云边缘云场景化商业实践
  4. 一文让你秒懂存储虚拟化
  5. 陈坤VS黄晓明:用大数据解读大明星
  6. 自媒体怎么做视频搬运
  7. Django系列(1)-自动化生成API文档
  8. React报错:Too many re-renders
  9. 电脑怎么连接隐藏的无线WiFi ?
  10. 全网顶尖,毫不夸张的说这份斯坦福大学机器学习教程中文笔记,能让你机器学习从入门到精通