Pandas 核心操作全攻略(数据选择 + 数值操作)
·
前言
本文整理了 Pandas 最常用的核心操作,涵盖数据选择和数值操作两大模块,所有示例均为可直接复用的实操代码,适合日常数据分析速查,也可作为新手入门 Pandas 的核心笔记。
一、环境准备与数据读取
python
运行
import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore') # 关闭警告提示
# 读取Excel数据(示例路径)
df = pd.read_excel('../data/重复值.xlsx') # 基础数据读取
df = pd.read_excel('./data/数值排序.xlsx') # 数值操作数据
df = pd.read_excel('./data/长宽表转换.xlsx', sheet_name='Sheet2') # 多sheet读取
二、数据选择操作(列 / 行 / 条件筛选)
2.1 列选择(按名称 / 位置)
表格
| 操作类型 | 语法示例 | 核心说明 |
|---|---|---|
| 单列(Series) | df['订单编号'] | 返回 Series 类型,仅获取指定单列 |
| 单列(DataFrame) | df[['订单编号']] | 双层中括号,返回 DataFrame 类型(保持表格结构) |
| 多列 | df[['订单编号','客户姓名']] | 传入列名列表,获取指定多列 |
| 按位置选指定列 | df.iloc[:,[0,3]] | iloc按位置索引,[:,]代表所有行,[0,3]选第 0、3 列 |
| 按位置选连续列 | df.iloc[:,0:3] | 切片(左闭右开),选第 0、1、2 列(不含第 3 列) |
2.2 行选择(按标签 / 位置)
表格
| 操作类型 | 语法示例 | 核心说明 |
|---|---|---|
| 行索引重命名 | df.rename(index={0:'0a',1:'1b'},inplace=True) | 自定义行索引名称,为行选择做准备 |
| 单行(按标签) | df.loc[['A1']] | loc按行索引标签选择,返回 DataFrame 单行 |
| 多行(按标签) | df.loc[['A1','A3']] | 传入标签列表,选择指定多行 |
| 单行(按位置) | df.iloc[0] | iloc按位置选第 0 行(返回 Series) |
| 多行(按位置) | df.iloc[[0,1],:] | 选第 0、1 行(所有列),axis=0可省略 |
| 行 + 列(位置) | df.iloc[0:2,0:2] | 切片选 0-1 行 + 0-1 列(左闭右开) |
2.3 条件筛选
表格
| 操作类型 | 语法示例 | 核心说明 | |
|---|---|---|---|
| 单一等值筛选 | df[df['客户姓名']=='李信'] | 筛选 “客户姓名” 等于 “李信” 的所有行 | |
| 多条件筛选 | df[(df['唯一识别码']>1002)&(df['客户姓名']=='杨端和')] | 多条件用&(且)/` | `(或)连接,每个条件需加括号 |
| 条件 + 列选择 | df[(条件)][['客户姓名','注册时间']] | 先筛选行,再保留指定列 | |
| 数值范围筛选 | df[df['年龄']<40] | 筛选年龄小于 40 的所有行 |
三、数值操作(替换 / 排序 / 删除 / 计算 / 转换)
3.1 数值替换
表格
| 替换类型 | 语法示例 | 核心说明 |
|---|---|---|
| 一对一替换 | df['年龄'].replace(240,33,inplace=True) | 指定列替换值,inplace=True直接修改原数据 |
| 多对一替换 | df.replace([245,280],35) | 全局替换多个值为同一个值 |
| 多替多替换 | df.replace({240:30,245:36}) | 字典形式,键 = 原数值,值 = 替换后数值 |
| 缺失值替换 | df.replace(np.NaN,1,inplace=True) | 将 NaN 填充为指定值(如 1) |
3.2 数值排序与排名
(1)排序
表格
| 排序类型 | 语法示例 | 核心说明 |
|---|---|---|
| 基础升序 | df.sort_values(by=['销售ID']) | 默认升序,按指定列排序 |
| 降序排序 | df.sort_values(by=['销售ID'],ascending=False) | ascending=False设置降序 |
| 缺失值排序 | df.sort_values(by=['销售ID'],na_position='first') | na_position='first'让 NaN 排开头(默认末尾) |
| 多列排序 | df.sort_values(by=['销售ID','注册时间'],ascending=[True,False]) | 主关键字升序,次关键字降序 |
(2)排名
表格
| 排名规则 | 语法示例 | 核心说明 |
|---|---|---|
| 平均值排名 | df['销售ID'].rank(method='average') | 相同值取排名平均值(如两个 1 排 1.5) |
| 顺序排名 | df['销售ID'].rank(method='first') | 按值出现顺序排名 |
| 最小排名 | df['销售ID'].rank(method='min') | 相同值取最小排名 |
| 最大排名 | df['销售ID'].rank(method='max') | 相同值取最大排名 |
3.3 数据删除(行 / 列)
表格
| 删除类型 | 语法示例 | 核心说明 |
|---|---|---|
| 按列名删除 | df.drop(['注册时间','销售ID'],axis=1) | axis=1指定列,返回新 DataFrame(需 inplace=True 修改原数据) |
| 按列位置删除 | df.drop(df.columns[[2,4]],axis=1) | 按列的位置索引删除 |
| 简洁删列 | df.drop(columns=['销售ID','注册时间']) | 更直观的删列写法(推荐) |
| 按行索引删除 | df.drop(['0a','3d'],axis=0) | axis=0指定行(可省略),按行索引删除 |
| 简洁删行 | df.drop(index=['4e','2c']) | 更直观的删行写法(推荐) |
3.4 数值计算与查找
表格
| 操作类型 | 语法示例 | 核心说明 |
|---|---|---|
| 频次统计 | df['销售ID'].value_counts() | 统计列中各值出现次数(如销售 ID=2 出现 3 次) |
| 占比统计 | df['销售ID'].value_counts(normalize=True) | 返回各值占比(如销售 ID=2 占比 0.5) |
| 唯一值获取 | df['销售ID'].unique() | 返回列去重后的唯一值(如 [1,2,3]) |
| 单列值查找 | df['年龄'].isin([31,23]) | 返回布尔值,标记列中是否包含指定值 |
| 全表值查找 | df.isin(['A1',23]) | 全表查找指定值,返回同维度布尔 DataFrame |
| 区间切分(等距) | pd.cut(df['年龄'],bins=[0,3,6,10]) | 按指定端点切分区间(左开右闭,如 (0,3] 包含 1/2/3) |
| 区间切分(分位) | pd.qcut(df['年龄'],3) | 按分位数将数据均分为 3 组 |
3.5 列插入与行列转换
(1)列插入
表格
| 插入方式 | 语法示例 | 核心说明 |
|---|---|---|
| 指定位置插入 | df.insert(2,'商品编号',['cat'+str(i) for i in range(1,7)]) | 在第 2 列位置插入新列 |
| 末尾新增列 | df['商品编号2']=['dog'+str(i)for i in range(1,7)] | 直接赋值新增列(最简洁) |
(2)行列互换与结构转换
表格
| 转换类型 | 语法示例 | 核心说明 |
|---|---|---|
| 行列转置 | newdf=df.T | 原行→新列,原列→新行 |
| 表格转树形 | newdf=df.stack() | 将列 “压入” 行,生成多层索引 Series |
| 树形转表格 | newdf.unstack() | 将堆叠的行 “还原” 为列,恢复表格结构 |
| 宽表转长表 | df.melt(id_vars=['Company','Name'],var_name='year',value_name='sale') | id_vars指定不变列,var_name/value_name定义新列名 |
| 长表转宽表 | df.pivot_table(index=['Company','Name'],columns='year',values='sale') | pivot_table聚合转换,行多→列多 |
3.6 批量数值处理(apply/applymap)
表格
| 函数类型 | 语法示例 | 核心说明 |
|---|---|---|
| 单列批量处理 | df['C1'].apply(lambda x:x*10) | apply+ 匿名函数,处理单列每个元素 |
| 单行批量处理 | df.iloc[0].apply(lambda x:x*10) | 处理单行每个元素 |
| 全表批量处理 | df.applymap(lambda x:x*100) | 遍历全表每个元素(等价 Python 二重循环,效率更高) |
四、核心避坑点
loc按标签索引(如订单编号 A1),iloc按位置索引(数字),二者不可混用;- 多条件筛选时,必须用
&/|(而非and/or),且每个条件需用括号包裹; drop()/sort_values()等方法默认返回新 DataFrame,需加inplace=True才修改原数据;- 切片操作(如
0:3)均为左闭右开,实际包含起始位置到结束位置前一位; apply()用于单列 / 单行处理,applymap()用于全表处理(Pandas 2.0 + 也可用df.map())。
总结
本文覆盖 Pandas 日常分析高频操作:
- 数据选择:列(名称 / 位置)、行(标签 / 位置)、条件筛选的核心语法;
- 数值操作:替换、排序、排名、删除、计算、行列转换、批量处理的实操方法;
- 避坑要点:索引混用、条件连接符、方法返回值等新手易出错的细节。
可直接将本文内容发布到 CSDN 个人作品中,作为 Pandas 核心操作速查手册,后续可根据学习进度补充数据清洗、聚合分析等进阶内容。
更多推荐
所有评论(0)