Pandas库详细介绍

发布时间:2026/7/31 11:37:15

Pandas库详细介绍 一. Pandas 介绍Pandas 是基于NumPy的一种工具该工具是解决数据分析任务而创建的Pandas 提供了大量能使我们快速便捷地处理数据的功能。Pandas 与出色Jupyter 工具包和其他库相结合Python中用于进行数据分析的环境在性能、生产率和协作能力方面都是卓越的。Pandas 的主要数据结构是Series一维数据与DatabaseFrame二维数据这两种数据结构足以处理金融、统计、社会科学、工程等领域的大多数案例。处理数据一般分为几个阶段数据整理与清洗、数据分析与建模、数据可视化、Pandas是处理数据的理想工具。环境安装Anaconda环境无需安装普通Python环境pip install padas -i https://pypi.tuna.tsinghua.edu.cn/simple二. Series (一维数据)Series是一种类似于一维数组的数据结构对象由下面两个部分组成values一组数据ndarray类型index相关的数据索引标签2.1 Series的创建两种创建方式1. 由列表或者NumPy数组创建默认索引为0到N - 1的整数型索引2.由字典创建2.1.1 由列表或者NumPy数组创建代码演示1代码演示2Series()在创建的时候还可以传入很多的参数 最常用的是index在创建时候指定索引如果不指定则默认为 0... n - 1。2.1.2 由字典创建代码演示2.1.3 series的两个属性2.1.3.1 values作用 返回 Series 中的数据格式为 NumPy 数组ndarray2.1.3.2 index作用 返回 Series 的索引标签格式为 Pandas Index 对象2.2 Series的索引可以使用中括号取单个索引此时返回的是元素类型或者中括号里一个列表取多个索引此时返回的仍然是一个Series类型。分为显示索引和隐式索引。2.2.1 显示索引使用index中的元素作为索引值使用.loc[] (推荐)2.2.1.1 通过索引取单个元素2.2.1.2 索引同时取出多个元素注意返回的元素类型为Series2.2.2 隐式索引隐式索引是指Pandas 自动生成的默认整数索引从 0 开始到n-1结束n是数据个数。也叫默认索引或位置索引。2.2.2.1 通过索引取单个元素2.2.2.2 索引同时取出多个元素2.3 Series显示切片和隐式切片这里就类比列表的切片进行学习即可。2.4 Series的基本属性shape - 形状size - 长度index - 索引values - 值name - 名字逐个代码演示2.5 Serives的基本方法head() 查看前几条数据默认5条tail() : 查看后几条数据默认5条1. head() / tail()作用 查看前几条数据默认5条2. 检测缺失数据pd.isnull()/isnull()检测缺失值缺失返回True否则Falsepd.notnull()/notnull()检测非缺失值不缺失返回True否则False3. 使用bool值索引过滤数据前面我们提到过在使用索引时可以传入一个列表一次性通过索引取出多个值。这里也可以传入一个布尔值数组当列表中元素为True时会取出对应位置的值为False时则不会取出。2.6 Series的运算2.6.1 基本的算术运算使用于NumPy的数组运算也适用于Series。2.6.2 Series之间的运算在运算中自动对齐索引如果索引不对呀则补充NaNSeries没有广播机制注意如果我们想保留所有的index则需要使用.add()函数。运算类型方法名 (Method)对应运算符 (Operator)描述加法.add()逐元素相加减法.sub()或.subtract()-逐元素相减乘法.mul()*逐元素相乘除法.div(),.divide()或.truediv()/逐元素相除浮点除法整除.floordiv()//逐元素向下取整除法取模.mod()%逐元素取余数幂运算.pow()**逐元素求幂上面的表格中就不在演示了和add用法相同。三. DataFrame二维数据DataFrame是一个【表格型】的数据结构可以看做事【由Series组成的字典】共用一个索引。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维扩展到多维。DataFeame即有行索引也有列索引。行索引index列索引columns值valuesNumPy的二维数组3.1 DataFrame的创建最常用的方法是传递一个字典创建DataFrame以字典的键作为每一【列】的名称以字典的值一个数组作为每一列。此外DataFrameme会自动加上每一行的索引和Series一样“若手动指定 columns 参数时指定的列名在字典中不存在则对应的列会填充 NaN”。方式1使用字典创建方式2传入一个二维的数组ndarray3.2 DataFrame的基本属性.values: 返回底层数据是一个 NumPy 的二维数组ndarray不包含行列标签。.columns: 返回列名组成的 Index 对象可用来查看或修改列名。.index: 返回行索引组成的 Index 对象可以是整数、字符串、日期等。.shape: 返回一个元组 (行数, 列数)快速了解数据规模3.3 DataFrame中的基本方法head / tail.head(n): 预览数据开头 n 行默认 n5常用于快速检查数据结构。.tail(n): 预览数据末尾 n 行默认 n5常用于检查数据结尾或排序后的结果。3.4 DataFrame的索引3.4.1 对列进行索引方式语法适用场景限制字典方式df[列名]任何列名无属性方式df.列名列名是有效标识符不能有空格、特殊字符1. 一次取出一列得到类型Series2. 使用两个中括号得到DataFrame类型 一次可以取一列或多列3.4.2 对行进行索引使用.loc[行索引]使用.iloc[整数行索引]注意不能DataFrame默认先取列不能使用df[] 直接来取列会报错1.一次取出一行得到类型Series2. 使用两个中括号得到DataFrame类型 一次可以取一列或多列3.4.3 对元素进行索引上面学习了取一行、取一列。这里可以先取行再取列当然也可以先取列后取行。就可以得到对应位置的元素。因为方法有很多很多。这里只演示一部分。下面还有其他的方法获取单个元素df.at[行标签, 列标签] 基于标签比loc更快 df.iat[行位置, 列位置] 基于位置比iloc更快专门用于获取或修改单个元素比loc/iloc速度快但只能取单个值3.5 DataFrame的切片注意直接用中括号时索引优先对列进行操作切片优先对行进行操作3.5.1 行切片3.5.2 列切片列切片必须使用.loc 或者.iloc 否则报错3.5.3 同时对行列进行切片操作代码说明取所有行的连续列df.loc[:, 列1:列3]列名切片包含两端取所有行的不连续列df.loc[:, [列1, 列3]]列名列表取指定行的连续列df.loc[行1:行3, 列1:列3]同时行列切片按位置取连续列df.iloc[:, 0:3]列位置切片左闭右开总结要么取一行或一列索引要么取连续的多行或多列切片要么取不连续的多行或多列中括号3.6 DataFrame的运算3.6.1 DataFrame与标量之间的运算其实和前面介绍的Series类似3.6.2 DataFrame之间的运算在运算中自动对齐不同索引的数据如果索引不对应则补NaNDataFrame没有广播机制3.6.3 Series和DataFrame之间的运算Series与DataFrame之间的运算使用Python操作符如Series的索引与DataFrame的列名对齐沿着行方向广播对每一行做相同操作索引不匹配的位置会产生NaN使用Pandas操作函数如.add()axis0Series索引与行名对齐沿列广播axis1Series索引与列索引对齐沿行广播同操作符代码演示1使用Python操作符如代码演示2使用函数以add() 为例四. Pandas的层次化索引创建层次化索引多层行索引多层列索引索引和切片操作多层索引的堆叠聚合操作4.1 创建多层索引4.1.1 隐式构造4.1.2 显示构造pd.MultiIndex1. 使用数组2. 使用元组tuple3. 使用笛卡尔积product笛卡尔积{a, b} 和{cd}进行笛卡尔积 — {a, c}、{ad}、{bc}、{b,d}4.1.3 Series 多层索引4.2 多层索引4.2.1 Series的多层索引操作1. 显示索引有很多种方法大家选择自己顺手的使用就好2 . 隐式索引4.2.2 DataFrame的多层索引操作注意索引在去取值的时候有很多种方法。只演示一部分。4.3 多层切片操作4.3.1 Series多层切片操作1. 显示切片以4.2.1 代码中的数据s变量存储的数据而例子一般显示切片之处理同班级的人或者查找同班级的人。如果跨班级则推荐使用隐式切片。2. 隐式切片4.3.2 Series多层切片操作1. 行切片2. 列切片4.4 索引的堆叠4.4.1 stack()默认行为将最里层的列索引变为行索引索引层级编号从最外层0向里依次递增0, 1, 2 ... nlevel参数指定将哪一层列索引变为行索引默认值-1表示最里层可以指定其他层级如level0表示最外层4.4.2 unstack()默认行为将最里层的行索引变为列索引索引层级编号从最外层0向里依次递增0, 1, 2 ... nlevel参数指定将哪一层行索引变为列索引默认值-1表示最里层可以指定其他层级如level0表示最外层fill_value参数当unstack()将行索引变为列索引时用于填充结果中缺失的位置五. 聚合函数sum()求和mean()平均值max()最大值min()最小值5.1 DataFrame聚合函数这里只演示sum() 函数。5.2 多层索引的聚合操作多层索引聚合函数中的level参数作用指定在哪个索引层级上进行聚合操作效果聚合后指定的层级会被保留其他层级被压缩层级编号从最外层0向里依次递增0, 1, 2 ... n可用函数sum()、mean()、max()、min()等都支持我的pandas版本不支持。不演示啦。六. 数据合并pd.concta()pd.append()pd.marge()6.1 pd.concat()concat()是 Pandas 中用于拼接合并多个 DataFrame 或 Series的函数就像把几张表格拼在一起。参数作用默认值示例objs要拼接的多个 DataFrame必填[df1, df2, df3]axis拼接方向0上下1左右0axis1join合并方式outer/内inner/外outerjoininnerignore_index是否忽略原行索引Falseignore_indexTruekeys给每个数据加一层索引Nonekeys[df1, df2]在代码演示之前先写一个构成DataFrame的函数方便后续的操作import pandas as pd import numpy as np def make_df(index, columns): data [[str(i) str(j) for j in columns] for i in index] df pd.DataFrame(data, indexindex, columnscolumns) return df代码演示演示最基本的合并代码演示2解释参数ignore_index。是否忽略行索引代码演示3keys参数会给数据加索引在最外层。直接看代码。代码演示4join参数的演示join可以等于outer / innerouter是默认值相当于取并集inner相当于取交集6.2 append() 新版本被弃用了append()就是concat(axis0)的简化版本专门用于垂直拼接追加行。不过在新的版本中彻底被弃用了可以使用上面的concat() 来替代此方法。6.3 merge() 【重点】merge()是 Pandas 中用于根据共同列键合并两个 DataFrame的函数类似于 SQL 中的 JOIN 操作。merge与concat的区别在于merge需要根据某一共同的行或列来进行合并使用pd.marge()合并会自动根据两者的相同column名称的你一列作为key来进行合并。每一列元素的顺序不要求一致on合并的列名两边相同Noneleft_on左边 DataFrame 的合并列Noneright_on右边 DataFrame 的合并列Nonehow合并方式innersuffixes重复列名的后缀(_x, _y)left_index是否用左边索引合并Falseright_index是否用右边索引合并False代码演示1一对一合并合并过程代码演示2一对多合并过程代码演示3多对多合并过程代码演示4当两两边的数据有多个相同列名的时候可以使用参数on来指定合并是的列名。代码演示5演示left_on 和right_on 。上面演示的都是有列名相同时候的情况如果两边数据没有相同的列名可以通过left_on 和right_on 来指定合并的列。代码演示6right_index 和 left_index使索引作为连接列。代码演示7how参数说明类比 SQLhowinner默认只保留两边都有的INNER JOINhowleft保留左边 DataFrame 的所有行LEFT JOINhowright保留右边 DataFrame 的所有行RIGHT JOINhowouter保留两边所有行FULL OUTER JOIN代码演示8suffixes当两个 DataFrame 有相同的列名除了合并用的键列时就需要用suffixes来区分它们。上面代码Pandas 自动加了_x和_y但不够直观我们可以使用suffixes自定义后缀。6.3.1 merge总结复习使用合并有三种现象: 一对一, 多对一, 多对多.合并默认会找相同的列名进行合并, 如果有多个列名相同,用on来指定.如果没有列名相同,但是数据又相同,可以通过left_on, right_on来分别指定要合并的列.如果想和index合并, 使用left_index, right_index来指定.如果多个列相同,合并之后可以通过suffixes来区分.还可以通过how来控制合并的结果, 默认是内合并, 还有外合并outer, 左合并left, 右合并right.七. Pandas中缺失值处理7.1 None和np.nan的区别1. NoneNone是Python自带的是Python中的空对象。None不参与到任何计算中。object类型的运算要比int类型的运算慢的多。2 np.nannp.nan 是浮点类型能参与到计算中但计算的结果总是NaN。当数据中存在np.nan时直接计算返回的结果还是NaN。但是可以使用np.nan_() 函数来计算此时会过滤掉nan。 例如使用np.nansum()

相关新闻