☰
Pandas基础
2026/10/3 2:35:28 网站建设 项目流程

1.概述

Pandas 是 Python 的一个第三方包,也是商业和工程领域最流行的结构化数据工具集,用于数据清洗,处理及分析

Pandas 在数据处理上有独特优势:

  • 底层是基于 Numpy 构建的,所以运行速度特别快
  • 有专门处理缺失值 Null 的API
  • 强大而灵活的分组,聚合,转换功能

适用场景:

  • 数据量大到 Excel 卡顿,且又都是单机数据
  • Pandas用于处理单机数据(小数据集(相对于大数据来说))
  • 在大数据 ETL 数据仓库中,对数据进行清洗及处理的环节使用Pandas

2.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 的整数型索引(数据长度为N)

Series 可以表示 DataFrame 中的一行或一列:

  • DataFrame 的每一列取出,就是一个 Series:
df = pd.DataFrame({"a":[1,2], "b":[3,4]}) s = df["a"] # 取出一列,得到Series
  • DataFrame 的每一行取出,返回的也是 Series
s = df.loc[0] # 取出一行,得到Series
2. 创建 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 DataFrame

1. 概述

DataFrame:二维数组(表格)对象

  • 由行索引(index)、列索引(columns)和数据集组成
  • 每一列本质上是一个 Series,且各列可以是不同的数据类型
  • 行索引:表明不同行,横向索引,命名为 index,axis=0
  • 列索引:表明不同列,纵向索引,命名为 columns,axis=1

示例如下:

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对象.T
4. DataFrame 对象方法

1.head(n):显示前 n 行内容

2.tail(n):显示后 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_index(drop=False)

  • 设置新的行索引
  • drop:默认为False,表示保留原来索引值;如果为True,表示删除原来索引值

  • 以某列值设置为新行索引

set_index(keys,drop=True)

  • keys:列索引名 / 列索引名称的列表
  • drop:默认为True,表示删除原来索引值

2.2 Pandas 数据类型

Pandas 的 Series 对象和 DataFrame 对象中具体每一个值的数据类型有很多

可以通过下面 API 查看 Series 对象和 DataFrame 对象中数据的类型

  • Series 对象:Series对象.dtypes
  • DataFrame 对象:DataFrame对象.dtypes,DataFrame对象.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.直接使用行列索引
  • Series:s [索引],按索引取单个值
  • DataFrame:
    • df [列索引名] 取列;
    • 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:就地修改,核心作用是控制操作的作用方式:是直接修改原数据对象,还是生成新的副本返回

取值默认值行为原对象变化
inplace=False✅ 默认生成一份修改后的新副本,原数据丝毫不动完全不变
inplace=True❌ 非默认直接在原对象上做修改,不生成副本直接被覆盖修改

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"] = 0

2.序列赋值:传入列表、数组或 Series,长度必须与 DataFrame 行数一致,逐行对应赋值

df["D"] = [10, 20, 30]

3.表达式计算赋值:基于已有列计算生成新列

df["总和"] = df["A"] + df["B"] df["翻倍"] = df["A"] * 2
2. 局部精准赋值: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"] = 50

2. iloc[ ] 按下标位置赋值

语法如下:

df.iloc[行位置, 列位置] = 值

示例如下:

# 修改第 0 行第 0 列 df.iloc[0, 0] = 888 # 修改前 2 行、前 2 列区域 df.iloc[0:2, 0:2] = 1
3.条件赋值

只修改满足筛选条件的行,是数据清洗、异常值处理的核心操作

# 把 A 列大于 2 的行,B 列设为 100 df.loc[df["A"] > 2, "B"] = 100 # 多条件:A>1 且 B<6 的行,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字段名 / Series,DataFrame 必填,指定按哪列排序—
axis0= 按行排序,1= 按列排序0
ascendingTrue升序,False降序;多列时可一 一对应升降序True
inplace是否直接修改原数据False
na_position空值NaN的位置:'last'放最后,'first'放最前‘last’
ignore_index排序后是否重置为从 0 开始的连续整数索引False

Series排序:

import pandas as pd s = pd.Series([12, 4, 7, 9, None]) # 默认升序,空值放末尾 s.sort_values() # 降序排列,空值放最前面 s.sort_values(ascending=False, na_position='first')

DataFrame 单列排序:

df = pd.DataFrame({ "班级": ["一班","一班","二班","二班"], "分数": [85, 92, 78, 92], "姓名": ["张三","李四","王五","赵六"] }) # 按分数升序排列 df.sort_values(by="分数") # 按分数降序,同时重置索引 df.sort_values(by="分数", ascending=False, ignore_index=True)

DataFrame 多列排序:by 列表中越靠前的列,排序优先级越高;第一列值相同时,再按第二列排序

# 先按班级升序,同班内再按分数降序 df.sort_values(by=["班级", "分数"], ascending=[True, False])
2.按索引排序:sort_index ()

根据行索引或列索引顺序排序

核心参数:

参数说明默认值
axis0:行索引排序;1:列索引排序0
ascendingTrue:升序(默认);False:降序;True
inplace是否就地修改原数据False
na_position索引缺失值的位置:‘last’ 放最后,‘first’ 放最前last(默认排最后)
level指定排序层级(多层索引用)层级名称或层级序号
kind排序算法quicksort(快排)

常用写法如下:

# 行索引降序排列 df.sort_index(ascending=False) # 按列名字母顺序,左右调换列的顺序 df.sort_index(axis=1)
3.排名函数:rank ()

不改变数据行的顺序,仅新增一列排名序号,专门处理并列排名的不同规则

核心参数:

method规则说明示例:值[92, 92, 78]的降序排名
average平均排名(默认)1.5, 1.5, 3
min并列取最小名次1, 1, 3
max并列取最大名次2, 2, 3
first按出现先后排,同名次不并列1, 2, 3
dense密集排名,名次不跳号1, 1, 2

示例:

# 给分数列生成排名,并列分数取相同最小名次 df["排名"] = df["分数"].rank(method="min", ascending=False)

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_value=0)

示例:

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, inplace=False, **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 各列的描述性统计信息:count,mean,std,min,max 等

2.统计函数(聚合统计)

聚合统计的核心是沿指定轴将一组数据计算为单个汇总值,是最常用的统计形式

核心参数如下:

参数默认值说明
axis00= 按列聚合(每列输出一个结果);1= 按行聚合(每行输出一个结果)
skipnaTrue是否自动跳过缺失值 NaN;设为False时,只要有 NaN 结果就为 NaN
numeric_onlyFalse是否仅对数值列计算,避免字符串列报错

常用聚合函数如下:

函数含义
sum()求和
mean()平均值
median()中位数
mode()众数
max()最大值
min()最小值
std()标准差(样本标准差,分母 n-1)
var()方差
count()非空值数量
abs()绝对值
nunique()去重值数量
quantile(q)分位数,q 取 0-1
idxmax()最大值的索引
dixmin()最小值的索引
3.累计统计函数
函数含义
cumsum()累计求和
cumprod()累计乘积
cummax()累计最大值
cummin()累计最小值

2.4.4 apply() 自定义运算

apply:是 Pandas 的自定义扩展接口

适用场景:当内置函数无法满足复杂逻辑时,可以通过 apply 将自定义函数应用到 DataFrame 的每一列、每一行,或分组后的每个子集

本质:是对轴方向的循环封装

核心语法与关键参数:

DataFrame对象名.apply(func, axis=0, args=(), result_type=None, **kwargs)
参数说明
func自定义函数,可以是def定义的函数,也可以是lambda匿名函数
axis核心参数:0= 按列应用(默认);1= 按行应用
args给自定义函数传递的额外位置参数,必须是元组格式
result_type控制返回结果的格式,常用expand将多返回值展开为多列

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询