Anaconda
一、基础概念
1. 什么是Anaconda?
Anaconda是面向数据科学与机器学习领域的一站式Python发行版,集成了Python解释器、conda包与环境管理器、NumPy/Pandas/Matplotlib等海量常用第三方库,以及Jupyter Notebook、Spyder等配套开发工具,可快速搭建标准化的数据开发环境。
2. Anaconda的核心优势
- 环境隔离:可创建多个独立的Python虚拟环境,彻底解决不同项目之间的依赖版本冲突
- 包管理强大:自动解析全量依赖关系,支持多语言包,兼容性远强于原生pip
- 开箱即用:预装绝大多数数据科学常用库,无需从零逐个安装配置
- 跨平台兼容:支持Windows/Mac/Linux全操作系统
- 生态完善:用户基数庞大,社区活跃,问题解决方案丰富
二、核心对比
1. conda 与 pip 的区别
| 对比维度 | conda | pip |
|---|---|---|
| 管理范围 | 支持Python包,也兼容C/C++、R等多语言包 | 仅能管理Python生态的包 |
| 环境管理 | 原生支持多环境创建、隔离与切换 | 本身无环境管理能力,需配合venv等工具使用 |
| 依赖处理 | 全局统一解析依赖,兼容性强,不易出现冲突 | 依赖处理能力弱,易出现依赖版本冲突 |
| 版本指定语法 | 单个等号 conda install 包名=版本号 |
两个等号 pip install 包名==版本号 |
| 默认下载源 | conda官方源,可配置国内镜像 | PyPI源,可配置国内镜像 |
三、核心命令
1. 环境管理
| 功能 | 标准命令 | 备注 |
|---|---|---|
| 创建指定Python版本的环境 | conda create -n 环境名 python=版本号 |
例:conda create -n ai_env python=3.12 创建时指定版本是最佳实践 |
| 激活指定环境 | conda activate 环境名 |
激活后命令行前缀会标记当前环境名 |
| 退出当前环境 | conda deactivate |
退回到base基础环境 |
| 查看所有环境列表 | conda env list |
带*的为当前激活环境 |
| 删除整个环境 | conda remove -n 环境名 --all |
必须加--all,否则只删单个包 |
| 查看conda全局信息 | conda info |
可查看版本、当前环境、源配置等 |
2. 包管理
⚠️ 重要前提:所有包操作必须先激活对应环境,否则默认操作base环境
功能 标准命令 备注 安装软件包 conda install 包名例: conda install pandas安装指定版本包 conda install 包名=版本号注意是单个等号 更新软件包到最新版 conda update 包名卸载软件包 conda remove 包名查看当前环境所有已装包 conda list文档未写但工作中极常用
四、镜像源配置
1. 为什么要配置国内镜像源?
conda默认的官方源服务器在海外,国内网络下载依赖时速度极慢、极易超时失败,配置国内镜像源可大幅提升下载速度和稳定性。
2. 常用国内镜像源
清华TUNA源、中科大源、阿里源,其中清华源通用性最高。
3. 配置步骤简述
- 执行命令
conda config --set show_channel_urls yes,生成配置文件 - 进入系统用户目录,找到生成的
.condarc文件 - 清空文件原有内容,写入国内镜像源地址后保存即可
五、最佳实践与常见踩坑
1. Anaconda安装路径的核心注意事项
安装路径禁止出现中文、空格、特殊字符 ,否则会引发各类未知报错。建议直接放在盘符根目录,例如 D:\anaconda3。
2. 为什么官方不推荐勾选自动添加PATH?
自动添加PATH可能与系统中已有的其他Python环境产生冲突,导致命令紊乱。推荐做法是安装时不勾选,安装完成后手动配置环境变量。
3. 为什么不建议直接在base环境装业务依赖?
base是Anaconda的基础环境,在其中安装大量第三方包容易污染基础环境,引发全局版本冲突。最佳实践是每个项目创建独立的虚拟环境,环境之间完全隔离,互不影响。
4. 删除环境的易错点
删除整个环境必须加上 --all 参数,缺少该参数只会删除环境中的某个包,而非删除整个环境。
Jupyter + NumPy基础
第一部分 Jupyter 基础
一、基础概念
- 什么是Jupyter Jupyter是开源的交互式计算环境,是数据科学、机器学习领域的标配工具,支持代码逐块运行、结果即时展示、图文混排,可用于数据分析、模型调试、报告撰写等场景。
- Jupyter Notebook 与 Jupyter Lab 的区别
- Jupyter Notebook:经典单文档界面,功能基础
- Jupyter Lab:新一代升级版本,支持多标签页、内置协作、扩展生态更丰富,是当前主流使用版本
二、本地启动方式
- 前置操作:先通过
conda activate 环境名激活对应Python环境 - 启动命令:
- 启动Lab:
jupyter lab - 启动Notebook:
jupyter notebook
- 启动Lab:
- 启动后会自动弹出浏览器;若未弹出,复制命令行中带token的本地地址手动打开即可。
三、核心快捷键
快捷键仅在命令模式 下生效,按
Esc可从编辑模式退回命令模式。
| 快捷键 | 功能 |
|---|---|
a |
在当前单元格上方插入新单元格 |
b |
在当前单元格下方插入新单元格 |
dd |
连续按两次,删除当前单元格 |
m |
切换为Markdown文本模式 |
y |
切换为Code代码模式 |
Ctrl + Enter |
运行当前单元格 |
Shift + Enter |
运行当前单元格,并跳转至下一单元格 |
四、PyCharm集成
- 配置路径:Settings → Python Interpreter → 添加Conda环境解释器
- 环境切换后建议重启PyCharm或清除缓存,避免识别异常
- 新建的纯净Conda环境默认无Jupyter内核,首次运行会自动安装
第二部分 NumPy 核心
一、基础概念
- 什么是NumPy NumPy(Numerical Python)是Python科学计算的基础库,核心是
ndarray多维数组对象,底层由C实现,提供超高速的向量化运算能力,涵盖数学运算、线性代数、随机数生成、傅里叶变换等功能,是Pandas、Scikit-learn等库的底层基础。 - 为什么NumPy比Python原生List快
- 同构连续存储:数组元素类型统一,内存连续分配,寻址效率更高
- 底层C实现:绕过Python解释器开销,执行效率接近原生C语言
- 向量化运算:一次指令操作批量元素,无需编写Python循环
二、ndarray三大核心特性
- 同类型约束:数组内所有元素必须为相同数据类型;Python List可存储任意类型
- 大小不可变:数组创建后总元素数量固定,修改大小只能新建数组
- 形状规则性:多维数组必须为"矩形"结构,如二维数组每行的列数必须一致,不能出现锯齿状
三、ndarray五大核心属性
| 属性 | 含义 | 示例返回 | 备注 |
|---|---|---|---|
.ndim |
数组的维度数 | 2 |
二维数组ndim=2 |
.shape |
数组的形状,返回元组 | (2, 3) |
代表2行3列,最常用属性 |
.size |
元素总个数 | 6 |
等于shape各元素的乘积 |
.dtype |
元素的数据类型 | int32 / float64 |
默认整数为int32,浮点数为float64 |
.itemsize |
单个元素占用字节数 | 4 / 8 |
了解即可 |
易错点:
.shape返回的是元组 ,一维数组shape为(n,),而非n或(n,1)。
四、数组创建方式 & 高频对比
1. array() 与 asarray()
np.array():始终将输入转换为新数组,一定会发生数据拷贝,生成独立内存空间np.asarray():若输入本身就是ndarray,则不拷贝,共享同一块内存;若输入为列表等其他类型,则与array一致会拷贝
适用场景:大数据量场景下,asarray可避免冗余内存拷贝,提升性能。
2. zeros / ones / empty 系列
| 函数 | 功能 | 注意点 |
|---|---|---|
np.zeros(shape) |
创建全0数组 | 元素默认float64类型 |
np.ones(shape) |
创建全1数组 | 元素默认float64类型 |
np.empty(shape) |
仅分配内存空间,不初始化元素值 | 元素为内存垃圾值,速度最快但不安全,仅用于后续会全覆盖赋值的场景 |
like系列:参照已有数组的形状创建对应数组,无需手动指定维度
np.zeros_like(arr)/np.ones_like(arr)/np.empty_like(arr)
3. arange() 与 linspace()
| 函数 | 功能 | 核心特点 | 适用场景 |
|---|---|---|---|
np.arange(start, stop, step) |
生成一维等差数组,左闭右开 | 指定步长,不指定元素个数 | 整数步长场景 |
np.linspace(start, stop, num) |
生成一维等差数组 | 指定元素个数,不指定步长 | 浮点步长、精准控制元素数量场景 |
endpoint参数考点:
endpoint=True(默认):包含stop值,间隔 = (stop - start) / (num - 1)endpoint=False:不包含stop值,间隔 = (stop - start) / num
补充:
np.logspace()生成等比数列,start/stop为指数值,可指定base底数,了解即可。
4. 随机数函数对比
| 函数 | 分布类型 | 取值范围 | 参数形式 |
|---|---|---|---|
np.random.rand(shape) |
[0,1)均匀分布 | 浮点数 | 直接传维度,如rand(2,3) |
np.random.randint(low, high, shape) |
整数均匀分布 | [low, high)整数 | 先范围后形状,左闭右开 |
np.random.uniform(low, high, shape) |
浮点数均匀分布 | [low, high)浮点数 | 自定义范围的浮点随机 |
np.random.randn(shape) |
标准正态分布 | 均值0,标准差1 | 直接传维度,如randn(2,3) |
五、高频易错点汇总
np.empty不是空数组,也不是全 0 数组,是未初始化的内存垃圾值np.random.randint是左闭右开区间,不包含 high 值np.array指定版本用单个等号,区别于 pip 的双等号- 一维数组的 shape 是
(n,),不是(n,1) - 修改
asarray生成的数组,可能会影响原数组(共享内存)
✅
- NumPy:ndarray 与 List 的区别、5 大核心属性、array 与 asarray 的区别、四种随机函数的区别、linspace 的 endpoint 参数
- Jupyter:7 个常用快捷键、启动命令
⚠️
- NumPy:zeros/ones/empty 的区别、arange 与 linspace 的适用场景
- Jupyter:基础概念与启动流程
❌
- Jupyter 的 PyCharm 集成步骤
- logspace、full_like 等偏门函数
- itemsize 属性细节
NumPy进阶 + Pandas入门
第一部分 NumPy进阶核心
一、基础补充
1. matrix矩阵类(了解即可)
np.matrix是ndarray的子类,仅支持二维矩阵,属于历史遗留产物。当前行业标准做法是直接使用ndarray配合@运算符完成矩阵运算,功能完全覆盖且更灵活,面试极少考察,工作中基本不用。
2. ndarray数据类型与转换
- 常用类型:
int32/int64(整数)、float32/float64(浮点数,默认float64)、bool(布尔型) - 创建时指定类型:通过
dtype参数,例:np.array([1,2,3], dtype=np.float64) - 已有数组类型转换:
.astype()方法- 核心特性:返回新数组,不修改原数组,必须用变量接收结果
- 易错点:浮点数转整数为截断取整(直接舍去小数部分),而非四舍五入
二、切片与索引
1. 基本用法
一维数组切片规则与Python列表完全一致:[start:stop:step],左闭右开,支持省略参数。
- 单个索引:
arr[2]获取指定位置元素 - 范围切片:
arr[2:9:2]从索引2到9,步长为2 - 省略写法:
arr[2:]从索引2到末尾;arr[::-1]数组倒序
2. 核心考点:切片是视图,而非拷贝
这是NumPy切片与Python列表切片的本质区别,高频面试题:
- Python列表切片:生成全新列表,修改切片不影响原列表
- NumPy数组切片:是原数组的内存视图,与原数组共享同一块内存,修改切片会直接修改原数组
- 最佳实践:如需独立副本,对切片调用
.copy()方法手动拷贝
三、核心常用函数
1. 基本数学函数
| 函数 | 功能 | 重要程度 |
|---|---|---|
np.abs() |
求元素绝对值 | ⭐⭐⭐ |
np.ceil() |
向上取整 | ⭐⭐ |
np.floor() |
向下取整 | ⭐⭐ |
np.rint() |
四舍五入,遵循「五成双」规则(恰好为5时,前一位偶数舍、奇数进) | ⭐⭐ |
np.isnan() |
判断元素是否为NaN(缺失值) | ⭐⭐⭐ |
np.where(条件, x, y) |
数组版三元运算符,满足条件返回x,否则返回y | ⭐⭐⭐ 超高频 |
np.where是数据清洗、打标签的核心函数,必须熟练掌握。
2. 统计函数 + axis参数
常用统计函数
| 函数 | 功能 |
|---|---|
np.sum() / np.mean() |
求和 / 求平均值 |
np.max() / np.min() |
最大值 / 最小值 |
np.std() / np.var() |
标准差 / 方差 |
np.argmax() / np.argmin() |
最大值 / 最小值的索引(扁平化后索引) |
np.cumsum() |
累积和 |
axis轴参数
- 默认不指定axis:对全部元素计算,返回单个标量
- 指定axis:沿该维度计算,计算后该维度消失
- 二维数组标准结论:
axis=0:沿列方向(垂直)计算,结果保留列数axis=1:沿行方向(水平)计算,结果保留行数
- 记忆口诀:axis等于几,运算后该维度就消失
3. 比较函数
np.any(条件):至少一个元素满足条件,返回Truenp.all(条件):所有元素都满足条件,返回True
4. 排序函数
| 写法 | 功能 | 是否修改原数组 |
|---|---|---|
arr.sort() |
原地排序 | 是,直接修改原数组 |
np.sort(arr) |
返回排序后的新数组 | 否,原数组保持不变 |
- 支持axis参数,默认
axis=-1(沿最后一个轴排序),二维数组默认按行排序 axis=0按列排序,axis=1按行排序
5. 去重函数
np.unique(arr):返回去重并升序排序后的一维数组,常用于数据清洗。
四、矢量化运算与广播机制
1. 什么是矢量化运算
NumPy无需编写Python循环,直接对整个数组执行算术运算,运算自动作用于每个元素。底层由C实现,执行效率远高于原生Python循环。
2. 广播三大规则(按顺序判断)
广播允许不同形状的数组进行元素级运算,核心是维度对齐与扩展:
- 维度对齐 :两个数组维度数不同时,给维度少的数组在左侧补1,直到维度数一致
- 维度扩展:对应维度上,长度要么相等,要么其中一个为1;长度为1的维度会自动复制扩展,匹配另一个数组的长度
- 报错条件:对应维度上,两个长度都不为1且不相等,无法广播,抛出异常
快速判断法:从右往左对齐两个数组的shape,每一位要么相等,要么其中一个是1,否则无法广播。
五、矩阵乘法
元素乘法 vs 矩阵乘法 核心区别
| 类型 | 运算符/函数 | 运算规则 | 形状要求 |
|---|---|---|---|
| 元素级乘法(对位相乘) | *、np.multiply() |
对应位置元素逐一相乘 | 形状完全相同(或可广播) |
| 矩阵乘法(点积) | @、np.dot()、arr.dot() |
行乘列求和 | 第一个数组的列数 = 第二个数组的行数 |
🚩 高频易错点:
*是元素级乘法,不是矩阵乘法!矩阵乘法优先使用@运算符,最直观清晰。 结果形状公式:(m, k) @ (k, n) = (m, n)
六、NumPy高频易错点汇总
astype()返回新数组,不修改原数组;浮点数转int是截断取整- NumPy切片是视图,修改会影响原数组;Python列表切片是拷贝
np.argmax()返回扁平化后的索引,不是二维坐标np.random.randint是左闭右开区间,不包含右端点*是元素乘法,@才是矩阵乘法- axis=0按列计算,axis=1按行计算;运算后对应维度消失
第二部分 Pandas入门基础
一、Pandas基础概念
1. 什么是Pandas
Pandas是基于NumPy开发的结构化数据分析库,相当于Python中的「Excel + SQL」,是数据科学、数据分析领域的核心工具。专注于处理带标签、带缺失值的表格型数据,提供数据读写、清洗、转换、聚合、关联等全流程能力。
2. 两大核心数据结构
- Series:一维带标签数组,是DataFrame的组成单元
- DataFrame:二维带标签表格结构,由多个Series组成(每一列是一个Series)
二、Series数据结构
1. 什么是Series
Series是一维的、带索引标签的数组,由两部分组成:
values:数据值,底层是NumPy的ndarrayindex:索引标签,默认是从0开始的整数,支持自定义为字符串、日期等类型
2. 核心特点
- 索引自定义:索引相当于数据的「主键」,不一定是数字,可以是业务标签
- 索引自动对齐:多个Series运算时,会按索引标签自动匹配对齐;索引不匹配的位置填充NaN,这是Pandas最核心的特性之一
- 原生支持缺失值 :用
NaN表示缺失值,处理能力远强于NumPy - 大小不可变:创建后长度固定,增减元素本质是生成新对象
3. 基础创建方式
导入惯例:import pandas as pd(行业统一简写为pd)
- 列表创建(默认整数索引):
pd.Series([1, 2, 3, 4])
✅
- NumPy:切片的视图特性、axis参数规则、广播机制三大规则、元素乘法与矩阵乘法的区别、np.where用法、两种sort的区别
- Pandas:Pandas定位与核心价值、Series的组成与核心特性(索引自动对齐)
⚠️
- NumPy:常用统计函数、astype类型转换、np.isnan、np.unique
- Pandas:Series基础创建
❌
- NumPy:matrix类、cumprod累积乘积、复杂数值类型
- Pandas:名称由来等背景知识