【数据分析基石】NumPy 与 Pandas 基础核心知识点全梳理
【数据分析基石】NumPy 与 Pandas 基础核心知识点全梳理
摘要:本文系统梳理了 Python 数据分析两大核心库 NumPy 和 Pandas 的关键知识点。从 NumPy 的数组创建、运算、统计到 Pandas 的 DataFrame 操作、数据清洗、合并聚合及文件读写,涵盖了数据分析的全流程。内容基于实战笔记整理,适合作为速查手册或入门复习指南。
📑 目录
- NumPy:数值计算的核心
- 1.1 核心优势与 ndarray 属性
- 1.2 数组的创建与转换
- 1.3 随机数与等差等比数列
- 1.4 基本运算与广播机制
- 1.5 统计函数与排序去重
- 1.6 矩阵点积
- Pandas:数据处理的神器
- 2.1 数据结构:Series 与 DataFrame
- 2.2 数据的创建与属性查看
- 2.3 数据切片与查询(loc/iloc)
- 2.4 数据赋值、排序与逻辑运算
- 2.5 统计分析与自定义函数 (apply)
- 2.6 文件读写 (CSV & MySQL)
- Pandas 进阶操作
- 3.1 增删改查实战
- 3.2 缺失值处理全流程
- 3.3 数据合并 (Concat & Merge)
- 3.4 分组聚合 (GroupBy)
- 3.5 交叉表与透视表
- 总结
1. NumPy:数值计算的核心
NumPy 是 Python 科学计算的基础包,其核心对象是 ndarray(多维数组)。它的主要优势在于速度快,并且是 Pandas 的底层依赖,强烈推荐使用。
1.1 核心优势与 ndarray 属性
核心属性速查:
表格
| 属性/方法 | 描述 |
|---|---|
ndim |
维度数量 |
shape |
数组形状 (行, 列) |
size |
元素总个数 |
itemsize |
单个元素的字节大小 |
dtype |
元素数据类型 |
type() |
容器类型 (通常为 <class 'numpy.ndarray'>) |
类型转换:
import numpy as np
arr = np.array([1.5, 2.5, 3.5])
# 转换为整数类型
new_arr = arr.astype(int)
1.2 数组的创建与转换
手动创建:
# 从列表创建
arr1 = np.array([1, 2, 3, 4, 5])
# arange: 类似 range,支持步长和 dtype
arr2 = np.arange(0, 10, 2, dtype=float)
1.3 随机数与等差等比数列
随机创建:
np.random.rand(): 生成 0~1 之间的随机数,指定形状。np.random.randint(low, high, size): 指定范围的整数。np.random.uniform(low, high, size): 指定范围的浮点数。
# 生成 3行5列,范围 -5 到 5 的均匀分布随机数
array3 = np.random.uniform(-5, 5, size=(3, 5))
# 生成整数随机数
array4 = np.random.randint(-5, 5, size=(3, 5))
等差与等比:
np.linspace(start, stop, num): 等差数列(指定元素个数)。np.logspace(start, stop, num, base): 等比数列(指定起始幂、结束幂、底数)。
1.4 基本运算与广播机制
NumPy 支持广播机制:先广播对齐,后进行运算。
array - array: 形状必须相同,否则报错。array - 单值: 支持,单值会广播到整个数组。
常用函数:
np.ceil(): 向上取整np.floor(): 向下取整np.rint(): 四舍五入np.isnan(): 判断是否为空 (NaN)np.multiply(),np.divide(),np.abs(): 广播乘、除、绝对值np.where(condition, x, y): 三元表达式判断
1.5 统计函数与排序去重
统计函数:
np.sum(arr), np.mean(arr) # 均值 (同 avg)
np.max(arr), np.min(arr)
np.argmax(arr), np.argmin(arr) # 最大/小值的索引
np.cumsum(arr) # 累加
np.cumprod(arr) # 累乘
np.var(arr), np.std(arr) # 方差,标准差
排序:
np.sort(arr): 返回排序后的新副本。arr.sort(): 直接修改原数组。- 倒序技巧:使用切片
[::-1]arr[::-1, ::-1] # 行倒序,列也倒序 arr[-1, -1] # 获取最后一行最后一列的元素
去重:
np.unique(arr): 合并子容器并去重,返回排序后的唯一值。
1.6 矩阵点积
别名:向量内积。
前提:arr1 的列数必须等于 arr2 的行数。
规则:结果行数取决于 arr1,列数取决于 arr2。
# 两种写法等价
res1 = np.dot(arr1, arr2)
res2 = arr1 @ arr2
2. Pandas:数据处理的神器
Pandas 建立在 NumPy 之上,提供了高级的数据结构和分析工具。
2.1 数据结构概览
- DataFrame: 二维表格 (Table),类似 Excel 或 SQL 表。
- Series: 一维数组 (Column),DataFrame 的每一列就是一个 Series。
- Index: 索引标签。
- Columns: 列名。
2.2 Series 的创建与属性
4种创建方式: List, Tuple, Dict, Array。
import pandas as pd
s1 = pd.Series([1, 2, 3, 4, 5, 6], index=['A', 'B', 'C', 'D', 'E', 'F'])
# 属性
s1.index # 索引列
s1.values # 值列
s1['A'] # 获取索引对应的值
2.3 DataFrame 的创建与属性
df = pd.DataFrame(data=数据, columns=['col1', 'col2'], index=['row1', 'row2'])
常用属性:
shape: 形状 (行, 列)index,columns: 行/列索引values: 纯数值数组T: 行列转置
特殊数据类型:
datetime:pd.to_datetime()转换。timedelta: 时间差运算 (dt1 - dt2)。category: 分类类型。- 优势:内存少、操作快。
- 场景:有限集合(如性别、省份)。可通过
astype('category')转换。
2.4 数据切片与查询
- 基础索引:
df['列名']获取列;df['列名']['行索引']获取具体值。 - 标签切片 (loc):基于索引标签,包含结束位置。
df.loc[行起始:行结束, 列起始:列结束] - 位置切片 (iloc):基于整数下标,不包含结束位置(类似 Python 切片)。
df.iloc[行起始:行结束, 列起始:列结束]
2.5 数据赋值、排序与逻辑运算
赋值:
df['新列'] = 单值 / list / Series
df['列名']['行索引'] = 单值
排序:
df.sort_values(by='列名', ascending=False): 按值排序。df.sort_index(ascending=True): 按索引排序。
逻辑运算(注意括号):
Pandas 中逻辑运算符优先级较高,条件必须加括号!
&(且),|(或),~(非)
# 错误示范:df[df['open'] > 23 & df['open'] < 24]
# 正确示范:
result = df[(df['open'] <= 23) | (df['open'] >= 24)]
逻辑函数:
df.query("open > 23 and open < 24"): 类 SQL 写法。-
# 语法:df.query("条件表达式") # 注意:query 内部支持 not, and, or 关键字,不需要 & | ~ result = df.query("open <= 23 or open >= 24") df['col'].isin([val1, val2]): 等同于 SQL 的IN。
2.6 统计分析与自定义函数
统计函数:
median: 中位数mode: 众数idxmax,idxmin: 最大/小值的索引axis参数:0(默认,按列统计),1(按行统计)。- 其他:
sum,mean,std,var,count,max,min,abs,prod.
累计值函数:cumsum (累加), cumprod (累乘), cummax, cummin。Series 和 DataFrame 均适用。
Apply 自定义函数:
def my_func(x):
return x * 2
# axis=0: 按列,传入 Series; axis=1: 按行,传入 Row 对象
df.apply(my_func, axis=0)
2.7 文件读写
CSV 读写:
# 读
df = pd.read_csv('file.csv', sep=',', usecols=['col1'], index_col='id')
# 注意:确保每列都有列名,否则易出 Bug
# 写
df.to_csv('out.csv', sep=',', columns=['col1'], index=False, index_label='ID')
MySQL 读写 (需 SQLAlchemy):
from sqlalchemy import create_engine
# 1. 创建引擎
engine = create_engine('mysql+pymysql://user:pwd@ip:port/db_name')
# 2. 读写
with engine.begin() as conn:
df_db = pd.read_sql('SELECT * FROM table', con=conn)
df_db.to_sql('table_name', con=conn, if_exists='append', index=False)
3. Pandas 进阶操作
3.1 增删改查实战
增加列:
- 直接赋值:简单快捷 (
df['new'] = ...)。 - assign:灵活,支持链式调用,可传入函数 (
df.assign(new=lambda x: x['old']*2))。
删除列/行:
- drop:返回新对象,不修改原数据。
df.drop(columns=['col1'], axis=1) # 删列 df.drop(index=['row1'], axis=0) # 删行 - del:直接修改原数据,慎用 (
del df['col1'])。
修改列/值:
- 直接改:
df.GDP = 666 - assign:
df = df.assign(GDP=888) - replace:
df.replace({旧值: 新值})-> 改内容 或df['列名'].replace(旧值, 新值)df.rename(columns={旧列名: 新列名})-> 改名字
排名函数 (rank):
模拟 SQL 窗口函数:
method='min': 并列名次相同,后续名次跳过 (1, 2, 2, 4) ->RANK()method='dense': 并列名次相同,后续名次连续 (1, 2, 2, 3) ->DENSE_RANK()- 参数:
ascending,pct(百分比),na_option(null 排前/后)。
3.2 缺失值处理全流程
判断缺失:
isnull(): 空为 True。notnull(): 空为 False。- 全局判断:
np.all(pd.notnull(df))(True 表示无空值)。
处理策略:
- 替换特殊符号为 NaN:
df.replace({'?': np.nan}, inplace=True) - 删除:
df.dropna() - 填充:
df.fillna(value)
3.3 数据合并
Concat (类似 UNION ALL):
主要用于行合并,也可按索引列合并。
pd.concat([df1, df2], axis=0) # 默认行合并
Merge (类似 JOIN):
用于列合并,基于关联字段。
pd.merge(left=df1, right=df2, how='inner', on='key')
# how: inner, left, right, outer
# 若关联字段名不同:left_on='k1', right_on='k2'
3.4 分组聚合 (GroupBy)
groupby 返回的是中间对象,无法直接查看,需配合聚合函数。
grp = df.groupby('category')
# 常用操作
grp.first() / grp.last() # 每组第一/最后一行
grp.get_group('A') # 获取特定组明细
grp.agg({'sales': 'sum', 'price': 'mean'}) # 多列多函数聚合
grp.filter(lambda x: x['sales'].sum() > 100) # 过滤组
3.5 交叉表与透视表
交叉表 (crosstab):
主要用于统计频次 (Count)。
pd.crosstab(df['行分类'], df['列分类'])
透视表 (pivot_table):
功能更强大,支持任意聚合函数。
pd.pivot_table(df,
values='值',
index='索引',
columns='列名',
aggfunc='sum') # 或 mean, count 等
4. 总结
本文涵盖了从 NumPy 底层数组操作到 Pandas 高层数据处理的完整知识体系。
- NumPy 擅长高性能数值计算和矩阵运算。
- Pandas 则是数据清洗、分析和探索的利器,其
DataFrame结构完美契合表格数据。
掌握这些核心 API(如 merge, groupby, apply, loc/iloc),将能解决 90% 以上的日常数据分析需求。建议结合真实数据集进行练习,以加深理解。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)