尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Pandas基础

Pandas基础 1.概述Pandas 是 Python 的一个第三方包也是商业和工程领域最流行的结构化数据工具集用于数据清洗处理及分析Pandas 在数据处理上有独特优势底层是基于 Numpy 构建的所以运行速度特别快有专门处理缺失值 Null 的API强大而灵活的分组聚合转换功能适用场景数据量大到 Excel 卡顿且又都是单机数据Pandas用于处理单机数据小数据集相对于大数据来说在大数据 ETL 数据仓库中对数据进行清洗及处理的环节使用Pandas2.Pandas 数据结构与数据类型2.1 Pandas 数据结构2.1.1 Series对象1. 概述Series一维带索引数组对象是DataFrame 的列对象由索引index值values组成支持所有数值、字符串等 Python 数据类型示例如下s pd.Series([12, 4, 7, 9], index[0, 1, 2, 3])value一维数组numpy.ndarry类型index相关的数据索引标签如果没有为数据指定索引于是会自动创建一个 0 到 N-1 的整数型索引数据长度为NSeries 可以表示 DataFrame 中的一行或一列DataFrame 的每一列取出就是一个 Seriesdf pd.DataFrame({a:[1,2], b:[3,4]}) s df[a] # 取出一列得到SeriesDataFrame 的每一行取出返回的也是 Seriess df.loc[0] # 取出一行得到Series2. 创建 Series 对象第一步导入pandas包import pandas as pd第二步创建 Series 对象方式1使用默认自增索引: [0, 1, 2, 3, ...] s1 pd.Series([1, 2, 3]) # 方法2:使用自定义索引 s2 pd.Series([1, 3, 5, 7, 9], index[a, b, c, d, e]) print(s2) # 方法3使用字典 s3 pd.Series({a: 1, b: 3, c: 5, d: 7, e: 9}) print(s3) # 方法4使用元组(默认自增索引) s4 pd.Series((1, 3, 5, 7, 9)) print(s4) # 方法5使用Numpy创建 import numpy as np s5 pd.Series(np.array([1, 3, 5, 7, 9])) print(s5)3. Series 对象属性索引Series对象.index值Series对象.values注意可通过所用获取值Series对象[索引]2.1.2 DataFrame1. 概述DataFrame二维数组表格对象由行索引index、列索引columns和数据集组成每一列本质上是一个 Series且各列可以是不同的数据类型行索引表明不同行横向索引命名为 indexaxis0列索引表明不同列纵向索引命名为 columnsaxis1示例如下df pd.DataFrame({ index: [0, 1, 2, 3] writer: [mark, barket, tom, job], title: [cookbook, HTML5, Python, Numpy], price: [23.56, 50.70, 12.30, 28.00] })2. 创建 DataFrame 对象第一步导入pandas包import pandas as pd第二步创建 DataFrame 对象# 方式1:使用 字典 列表 创建(默认自增行索引) ---- 列构建 data1 { name: [张三, 李四, 王五], age: [25, 30, 35] } df1 pd.DataFrame(data) # 方式2:使用 列表 元组 创建 ---- 行构建 data2 [ (张三, 25), (李四, 30), (王五, 35) ] df2 pd.DataFrame(data2, columns[name, age], index[1, 2, 3]) # 方式3:使用 Numpy 创建 ---- 整体构建 data np.array([ [张三, 25], [李四, 30], [王五, 35] ]) df3 pd.DataFrame(data, columns[name, age], index[1, 2, 3]) # 方式4:读取文件数据并返回df df4 pd.read_csv(csv格式数据文件路径)3. DataFrame 对象属性形状df对象.shape返回元组行索引df对象.index列索引df对象.columns值df对象.values直接获取 Data 值转置df对象.T4. DataFrame 对象方法1.headn显示前 n 行内容2.tailn显示后 n 行内容3.info查看 DataFrame 对象详细信息4.describe查看 DataFrame 对象描述性统计信息5. DataFrame 索引的设置修改行列索引值# 1.准备数据 data np.array([[张三, 25], [李四, 30], [王五, 35]]) # 2.创建 DataFrame 对象 df3 pd.DataFrame(data, columns[a, b], index[A, B, C]) # 3.修改行索引值 # 3.1 修改行索引值 df3.index [1, 2, 3] # 3.2 修改列索引值 df3.columns [name, age]注意修改索引值时必须整体全部修改单独修改某处索引值是错误的重设行索引重设行索引reset_indexdropFalse设置新的行索引drop默认为False表示保留原来索引值如果为True表示删除原来索引值以某列值设置为新行索引set_indexkeysdropTruekeys列索引名 / 列索引名称的列表drop默认为True表示删除原来索引值2.2 Pandas 数据类型Pandas 的 Series 对象和 DataFrame 对象中具体每一个值的数据类型有很多可以通过下面 API 查看 Series 对象和 DataFrame 对象中数据的类型Series 对象Series对象.dtypesDataFrame 对象DataFrame对象.dtypesDataFrame对象.info几种特殊数据类型datetime类型timedelta类型category类型category类型数据用于表示分类数据通常用于有限集合中的数据类型例如性别颜色产品类型等这种数据类型的优点在于占用更少的内存并且分类操作更快2.3 Pandas 基本数据操作2.3.1 索引操作2.3.1.1 索引查询操作1. loc[ ]按索引取值语法如下df.loc[行索引, 列索引]支持单行、列表、切片、布尔条件筛选示例如下2. iloc[ ]按下标位置取值语法如下df.iloc[行号, 列号]注意行号列号从 0 开始只接受整数、整数列表、整数切片示例如下3.直接使用行列索引Seriess [索引]按索引取单个值DataFramedf [列索引名] 取列df [行索引切片] 取多行df [列索引名][行索引名] 取某列某行数据先列后行语法如下# Series取值 s[1] # DataFrame 取列 df[A] # DataFrame 取前 2 行 df[0:2] # DataFrame 取A列下的第2行 df[A][1]2.3.1.2 索引修改操作rename 重命名索引修改指定行索引或列索引的标签核心作用是给已有的索引标签 “改名”语法如下inplace就地修改核心作用是控制操作的作用方式是直接修改原数据对象还是生成新的副本返回取值默认值行为原对象变化inplaceFalse✅ 默认生成一份修改后的新副本原数据丝毫不动完全不变inplaceTrue❌ 非默认直接在原对象上做修改不生成副本直接被覆盖修改2.3.2 赋值操作赋值是 Pandas 数据修改的基础操作核心准则优先通过 loc / iloc 一步定位再赋值1. 整列赋值与新增列1.标量广播赋值赋单个数值时会自动广播到整列所有行import pandas as pd df pd.DataFrame({A: [1, 2, 3], B: [4, 5, 6]}) # 修改 A 列所有值为 100 df[A] 100 # 新增 C 列全部填充 0 df[C] 02.序列赋值传入列表、数组或 Series长度必须与 DataFrame 行数一致逐行对应赋值df[D] [10, 20, 30]3.表达式计算赋值基于已有列计算生成新列df[总和] df[A] df[B] df[翻倍] df[A] * 22. 局部精准赋值loc /iloc修改指定单元格、指定行 / 列区域必须用 loc 按索引或 iloc按下标位置1.loc[ ] 按索引赋值语法如下df.loc[行索引, 列索引] 值示例如下# 修改单个单元格索引 0 行、A 列 df.loc[0, A] 999 # 修改指定多行多列 df.loc[[0, 2], [A, B]] 0 # 标签切片赋值 df.loc[0:1, B] 502. iloc[ ] 按下标位置赋值语法如下df.iloc[行位置, 列位置] 值示例如下# 修改第 0 行第 0 列 df.iloc[0, 0] 888 # 修改前 2 行、前 2 列区域 df.iloc[0:2, 0:2] 13.条件赋值只修改满足筛选条件的行是数据清洗、异常值处理的核心操作# 把 A 列大于 2 的行B 列设为 100 df.loc[df[A] 2, B] 100 # 多条件A1 且 B6 的行C 列设为 符合 df.loc[(df[A] 1) (df[B] 6), C] 符合2.3.3 排序操作Pandas 排序核心分为两类按数据值排序 sort_values、按索引标签排序 sort_index另外补充排名函数 rank用于生成排名序号不改变原数据顺序1.按值排序sort_values 根据一列或多列的数值大小排序Series 和 DataFrame 均支持核心参数参数说明默认值by字段名 / SeriesDataFrame 必填指定按哪列排序—axis0 按行排序1 按列排序0ascendingTrue升序False降序多列时可一 一对应升降序Trueinplace是否直接修改原数据Falsena_position空值NaN的位置last放最后first放最前‘last’ignore_index排序后是否重置为从 0 开始的连续整数索引FalseSeries排序import pandas as pd s pd.Series([12, 4, 7, 9, None]) # 默认升序空值放末尾 s.sort_values() # 降序排列空值放最前面 s.sort_values(ascendingFalse, na_positionfirst)DataFrame 单列排序df pd.DataFrame({ 班级: [一班,一班,二班,二班], 分数: [85, 92, 78, 92], 姓名: [张三,李四,王五,赵六] }) # 按分数升序排列 df.sort_values(by分数) # 按分数降序同时重置索引 df.sort_values(by分数, ascendingFalse, ignore_indexTrue)DataFrame 多列排序by 列表中越靠前的列排序优先级越高第一列值相同时再按第二列排序# 先按班级升序同班内再按分数降序 df.sort_values(by[班级, 分数], ascending[True, False])2.按索引排序sort_index 根据行索引或列索引顺序排序核心参数参数说明默认值axis0行索引排序1列索引排序0ascendingTrue升序默认False降序Trueinplace是否就地修改原数据Falsena_position索引缺失值的位置‘last’ 放最后‘first’ 放最前last默认排最后level指定排序层级多层索引用层级名称或层级序号kind排序算法quicksort快排常用写法如下# 行索引降序排列 df.sort_index(ascendingFalse) # 按列名字母顺序左右调换列的顺序 df.sort_index(axis1)3.排名函数rank 不改变数据行的顺序仅新增一列排名序号专门处理并列排名的不同规则核心参数method规则说明示例值[92, 92, 78]的降序排名average平均排名默认1.5, 1.5, 3min并列取最小名次1, 1, 3max并列取最大名次2, 2, 3first按出现先后排同名次不并列1, 2, 3dense密集排名名次不跳号1, 1, 2示例# 给分数列生成排名并列分数取相同最小名次 df[排名] df[分数].rank(methodmin, ascendingFalse)2.4 DataFrame 运算2.4.1 算数运算对两个 DataFrame对应位置的元素执行算术计算支持运算符和专用方法两种写法1.基础运算符运算符写法简洁但无法控制缺失值运算运算符说明加法减法-乘法*除法/浮点除法整除//向下取整取余%幂运算**语法如下df1 df2 # 加法 df1 * df2 # 对应位置相乘示例如下2.专用方法专用方法支持 fill_value 参数可先填充缺失值再运算避免 NaN 传播运算方法加add()减sub()/subtract()乘mul()/multiply()除div()/truediv()整除floordiv()取余mod()幂pow()语法如下# 缺失位置用0填充后再相加 df1.add(df2, fill_value0)示例2.4.2 比较与逻辑运算1.比较运算逐元素进行大小比较返回布尔型 DataFrame/Series运算符含义大于小于等于!不等于大于等于小于等于语法如下df 0 # 判断每个元素是否大于0 df[A] 1 # 判断A列每个元素是否等于1示例2.逻辑运算用于组合多个布尔条件注意必须用与|或~非不能用 and/or/not每个条件必须用括号包裹否则会因运算符优先级报错语法如下# 筛选 A列0 且 B列10 的行 df[(df[A] 0) (df[B] 10)] # 筛选 A列 不等于 3 的行 df[~(df[A] 3)]示例3.query方法query方法是 Pandas 提供的字符串表达式式行筛选方法语法如下df.query(expr, inplaceFalse, **kwargs)核心参数参数说明expr核心参数字符串形式的查询表达式直接使用列名作为变量inplace是否就地修改原数据默认False示例如下4.isin方法isin方法是 Pandas 中成员资格判断的核心方法用于逐个判断元素是否属于指定集合离散返回布尔型结果语法isin 同时支持 Series 和 DataFrame 调用# Series 调用返回同长度布尔Series Series对象名.isin(values) # DataFrame 调用返回同形状布尔DataFrame DataFrame对象名.isin(values)values 参数支持的类型列表 / 元组 / 集合最常用指定匹配的取值集合Series判断元素是否在另一个 Series 的取值中字典仅 DataFrame 可用按列分别指定不同的匹配集合DataFrame按位置一 一对应匹配2.4.3 统计计算1.describe用于查看 Series / DataFrame 各列的描述性统计信息countmeanstdminmax 等2.统计函数聚合统计聚合统计的核心是沿指定轴将一组数据计算为单个汇总值是最常用的统计形式核心参数如下参数默认值说明axis00 按列聚合每列输出一个结果1 按行聚合每行输出一个结果skipnaTrue是否自动跳过缺失值 NaN设为False时只要有 NaN 结果就为 NaNnumeric_onlyFalse是否仅对数值列计算避免字符串列报错常用聚合函数如下函数含义sum()求和mean()平均值median()中位数mode()众数max()最大值min()最小值std()标准差样本标准差分母 n-1var()方差count()非空值数量abs()绝对值nunique()去重值数量quantile(q)分位数q 取 0-1idxmax()最大值的索引dixmin()最小值的索引3.累计统计函数函数含义cumsum()累计求和cumprod()累计乘积cummax()累计最大值cummin()累计最小值2.4.4 apply 自定义运算apply是 Pandas 的自定义扩展接口适用场景当内置函数无法满足复杂逻辑时可以通过 apply 将自定义函数应用到 DataFrame 的每一列、每一行或分组后的每个子集本质是对轴方向的循环封装核心语法与关键参数DataFrame对象名.apply(func, axis0, args(), result_typeNone, **kwargs)参数说明func自定义函数可以是def定义的函数也可以是lambda匿名函数axis核心参数0 按列应用默认1 按行应用args给自定义函数传递的额外位置参数必须是元组格式result_type控制返回结果的格式常用expand将多返回值展开为多列
返回列表