尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
NumPy与Pandas速查表实战:从数组操作到表格处理的避坑指南
简介这份 Numpy and Pandas Cheat Sheet 面向刚接触 Python 数据分析的初学者与需要快速查阅常用 API 的开发者用一页速查表的形式梳理两大核心库的高频操作帮助解决语法记不牢、函数调用易混淆的问题。资源为单个 PDF 文件压缩包约 67KB内容涵盖导入约定、Numpy 向量化运算与 Matplotlib 绘图、Pandas 的 Series 与 DataFrame 索引访问、统计汇总、apply 函数应用、条件过滤、分组排序、合并连接、缺失值处理及字符串与日期清洗等模块并附有常见函数速查条目。目前已有 193 人学习下载适合作为日常编码时的案头参考也可用于系统复习数据分析基础操作配合 Seaborn 可视化快速上手真实项目。1. 从一份速查表说起为什么 NumPy 和 Pandas 总是被放在一起学很多人第一次打开数据分析的入门材料看到的就是一份把 NumPy 和 Pandas 常用操作并排罗列的速查表。它看起来像两张互不相干的清单一边是数组的创建、切片、广播另一边是表格的筛选、分组、连接。真正上手做项目才会发现这两者从来不是并列关系而是上下游关系——NumPy 负责数值计算的底层内存与向量化Pandas 负责带标签的表格组织与业务语义。一份好的速查表价值不在于让你背下所有函数名而在于让你在遇到「这列数据怎么按条件替换」「这个矩阵怎么按行归一化」时能立刻判断该翻到哪一页。这份速查表适合三类人刚转行做数据分析、还在被axis参数绕晕的新手写惯了循环、想把手写for换成向量化的熟手以及需要把零散操作固化成可复用片段的一线工程师。下面我不逐条翻译速查表而是把它拆成能直接抄进项目的操作路径顺带把那些速查表不会写的参数边界和翻车点讲清楚。2. 先把 NumPy 的数组操作跑通从创建到广播的四个关键动作2.1 创建与形状别让一维数组悄悄变成二维速查表里np.array、np.zeros、np.arange通常只占一行但形状问题往往在后续运算才爆发。我一般会在创建后立刻打印.shape和.ndim尤其是从列表嵌套结构转换时。import numpy as np # 从嵌套列表创建注意中括号层数决定维度 a np.array([[1, 2, 3], [4, 5, 6]]) # shape (2, 3) b np.array([1, 2, 3]) # shape (3,) 一维 c np.zeros((2, 3), dtypenp.float32) # 指定 dtype 避免后续隐式转换 d np.arange(0, 10, 2) # [0 2 4 6 8] print(a.shape, a.ndim) # (2, 3) 2 print(b.shape, b.ndim) # (3,) 1 print(c.dtype) # float32逻辑说明np.array的维度由嵌套层数决定[[...]]是二维[...]是一维。参数上dtype建议显式指定默认float64在内存敏感场景会翻倍。np.arange的第三个参数是步长不包含终点值这点和 Python 内置range一致但和np.linspace不同——后者包含终点且第三个参数是点数而非步长。2.2 索引与切片视图和副本的区别决定你会不会改坏原数据速查表通常只写a[1:3]但不会强调切片返回的是视图。对视图赋值会改到原数组这是血泪经验里最常见的一类 bug。a np.arange(10) view a[2:5] # 视图共享内存 view[0] 999 print(a) # [0 1 999 3 4 5 6 7 8 9] 原数组被改 copy a[2:5].copy() # 显式副本 copy[0] -1 print(a) # 原数组不受影响逻辑说明基础切片冒号返回视图花式索引整数数组返回副本。参数上.copy()是后悔药不确定时加上它代价是一次内存拷贝。布尔索引也返回副本所以a[a 5] 0这种写法是安全的它直接在原数组上按掩码赋值。2.3 广播形状对齐规则和三个必调参数广播是 NumPy 最容易被玄学化的部分。规则其实只有一条从右往左逐维比较维度相等或其中一个为 1 即可广播否则报错。x np.ones((3, 4)) y np.arange(4) # shape (4,) z x y # y 广播成 (3, 4) col np.arange(3).reshape(3, 1) # shape (3, 1) w x col # col 广播成 (3, 4) # 下面这行会报错因为 3 和 4 不相等且都不为 1 # bad np.ones((3, 4)) np.arange(3)逻辑说明reshape(3, 1)把一维变成列向量这是做按行归一化、减均值等操作的常用手法。参数上reshape可以用-1让 NumPy 自动推断某一维例如reshape(3, -1)。如果广播报错先打印两个数组的.shape从右往左对齐看基本能定位问题。2.4 向量化替代循环一个归一化的完整例子速查表会列np.mean、np.std但不会告诉你如何组合成按列标准化。下面这个片段可以直接抄。data np.random.randn(100, 5) # 100 行 5 列 mean data.mean(axis0) # 每列均值shape (5,) std data.std(axis0) # 每列标准差 normalized (data - mean) / std # 防止除零加一个极小值 normalized_safe (data - mean) / (std 1e-8)逻辑说明axis0表示沿行方向压缩得到每列统计量axis1则是每行。参数上std默认除以 N若需要样本标准差要传ddof1。1e-8是工程习惯避免某列方差为零时出现 inf。这套写法比双重循环快一到两个数量级且没有中间列表开销。3. Pandas 的表格操作筛选、分组、连接怎么写得又快又稳3.1 筛选与赋值loc 和 iloc 的边界以及链式赋值的坑速查表会写df[df[a] 0]但涉及赋值时必须用.loc明确行列否则触发SettingWithCopyWarning。import pandas as pd df pd.DataFrame({ name: [A, B, C, D], score: [85, 92, 78, 95], group: [x, y, x, y] }) # 条件筛选 high df[df[score] 90] # 安全赋值loc[行条件, 列名] df.loc[df[score] 80, level] low df.loc[df[score] 80, level] high # iloc 按位置左闭右开 first_two_rows df.iloc[0:2, 0:2]逻辑说明.loc按标签.iloc按整数位置。链式写法df[df[a] 0][b] 1在 Pandas 中可能只改到临时副本这是最常见的翻车点。参数上.loc的行条件可以是布尔 Series列名可以是单个字符串或列表。如果列不存在.loc赋值会新建列这点和直接df[new] ...效果一致但前者更可控。3.2 分组聚合groupby 的三种输出形态和 agg 的用法速查表通常只给df.groupby(key).mean()但实际业务需要多列不同聚合、自定义函数、以及重置索引。# 单列聚合 mean_score df.groupby(group)[score].mean() # 多列多函数 agg_result df.groupby(group).agg( avg_score(score, mean), max_score(score, max), count(name, count) ).reset_index() # 自定义聚合 def score_range(s): return s.max() - s.min() custom df.groupby(group)[score].agg(score_range)逻辑说明agg的命名聚合写法新列名(原列, 函数)是 Pandas 较新版本推荐的输出列名清晰。参数上reset_index()把分组键从索引变回普通列方便后续合并。自定义函数接收的是 Series返回标量。如果分组后想保留原表行数用transform而不是agg。3.3 连接与合并merge 的四种连接方式和索引对齐速查表会列merge、join、concat但容易混淆。我一般统一用merge因为连接键和方式最明确。left pd.DataFrame({id: [1, 2, 3], a: [x, y, z]}) right pd.DataFrame({id: [2, 3, 4], b: [p, q, r]}) inner pd.merge(left, right, onid, howinner) # 交集 outer pd.merge(left, right, onid, howouter) # 并集 left_j pd.merge(left, right, onid, howleft) # 保留左表 right_j pd.merge(left, right, onid, howright)# 保留右表逻辑说明how参数控制连接方式默认inner。参数上如果两表连接键名不同用left_on和right_on。连接后会出现_x、_y后缀用suffixes自定义。concat适合纵向堆叠axis0按行axis1按列但按列时是按索引对齐容易产生大量 NaN不如merge直观。3.4 缺失值与类型转换fillna、astype 和 category 的取舍速查表会列isnull、fillna、dropna但类型转换的坑往往在内存和后续运算上。df2 pd.DataFrame({ v: [1.0, np.nan, 3.0], g: [a, b, a] }) # 填充缺失 df2[v_filled] df2[v].fillna(df2[v].mean()) # 类型转换 df2[v_int] df2[v_filled].astype(int) # 类别类型适合低基数列 df2[g_cat] df2[g].astype(category) print(df2[g_cat].cat.categories)逻辑说明fillna可以传标量、字典或 Series。astype(int)要求没有 NaN否则报错所以先填充。category类型在低基数列上能显著省内存且分组聚合更快但插入新类别时需要先更新 categories。参数上astype转换失败会抛异常可以用pd.to_numeric(..., errorscoerce)把无法转换的变成 NaN。4. 避坑与排查速查表不会写的五条实战教训4.1 现象修改切片后原数组变了原因视图共享内存解决不确定就.copy()NumPy 的基础切片返回视图这是设计如此不是 bug。排查方法打印view.base如果不是 None说明它是某个数组的视图。解决方式是在切片后加.copy()或者在创建时就明确是否需要独立内存。Pandas 的切片行为又不同df[0:2]返回副本但.loc切片在某些版本返回视图所以赋值一律用.loc明确行列。4.2 现象SettingWithCopyWarning反复出现原因链式索引解决用.loc一步到位这个警告不是报错但意味着你的赋值可能没生效。典型触发是df[df[a] 0][b] 1。原因是第一步筛选返回副本第二步赋值改的是副本。解决方式是合并成df.loc[df[a] 0, b] 1。如果确实需要先筛选再操作用.copy()显式创建新 DataFrame后续操作都在新表上。4.3 现象groupby后列不见了原因分组键变成索引解决reset_index()或as_indexFalsedf.groupby(g)[v].mean()返回的 Series 索引是分组键不是列。如果后续要merge索引对不上。两种解决一是.reset_index()把索引变列二是groupby(g, as_indexFalse)直接保留列结构。参数上as_indexFalse在多列聚合时更直观但命名聚合写法下reset_index()更通用。4.4 现象merge后行数变多原因连接键有重复值解决先检查唯一性merge默认是内连接如果右表连接键有重复结果会笛卡尔积式膨胀。排查方法right[id].duplicated().sum()看重复数量。解决方式先去重right.drop_duplicates(subsetid)或者明确用validateone_to_one让 Pandas 在键不唯一时报错。参数上validate可选one_to_one、one_to_many、many_to_one、many_to_many是防止意外膨胀的好工具。4.5 现象内存爆掉原因默认float64和object类型解决降位宽和转categoryNumPy 默认float64Pandas 读 CSV 时数值列也是float64字符串列是object。对于百万行数据把float64降到float32能省一半内存把低基数字符串转category能省更多。排查方法df.memory_usage(deepTrue)看每列占用。解决方式读入时指定dtype或读入后批量astype。注意float32精度约 7 位有效数字金融计算慎用。5. 把速查表变成自己的工具箱三个进阶习惯5.1 用pipe把多步操作串成可读流水线当清洗步骤超过五步嵌套写法会变成黑匣子。pipe让每一步都是一个函数顺序清晰中间结果可打印。def drop_na_rows(df, cols): return df.dropna(subsetcols) def add_ratio(df, num, den): df df.copy() df[ratio] df[num] / df[den] return df result ( df.pipe(drop_na_rows, cols[score]) .pipe(add_ratio, numscore, denscore) )逻辑说明pipe把 DataFrame 作为第一个参数传给函数函数返回 DataFrame。参数上额外参数通过pipe的关键字传入。这种写法在调试时可以在任意一步插入print或断点比一长串链式调用更容易定位问题。5.2 用query和eval写复杂条件但注意作用域query让筛选条件接近自然语言列名含空格时用反引号。df3 pd.DataFrame({a: [1, 2, 3], b: [4, 5, 6]}) filtered df3.query(a 1 and b 6) # 引用外部变量用 threshold 2 filtered2 df3.query(a threshold)逻辑说明query底层用numexpr加速大数据量下比布尔索引快。参数上外部变量必须加前缀否则会被当成列名。eval类似用于计算新列例如df3.eval(c a b, inplaceTrue)。注意inplace在 Pandas 新版本中逐渐被弃用建议用赋值写法。5.3 验证习惯每一步都检查形状和缺失值我自己的习惯是每做完一步转换就打印shape和isnull().sum()。这不是强迫症而是因为数据分析的 bug 往往不报错只是结果悄悄偏了。比如merge后行数变了、groupby后某些组消失了、astype把异常值变成了 NaN。一个简单的检查函数就能省下大量回头排查的时间。def check(df, step_name): print(f[{step_name}] shape{df.shape}, nulls{df.isnull().sum().sum()}) return df result ( df.pipe(check, raw) .pipe(drop_na_rows, cols[score]) .pipe(check, after_dropna) )逻辑说明check返回原 DataFrame所以可以无缝插入pipe链。参数上isnull().sum().sum()统计全表缺失总数若要看每列去掉最后一个.sum()。这个习惯在多人协作时尤其有用别人看你的 notebook 能清楚知道每一步的数据形态。最后说一句我自己的教训早年我总想背下速查表里所有函数后来发现真正有用的是记住「什么场景该翻哪一页」以及每个操作背后的形状、类型、内存代价。速查表是地图不是终点。希望帮到你。本文还有配套的精品资源点击获取
RELATED

相关推荐

1 个 AI 项目从 0 到 1:完整流程——好的开始,是成功的一半

1 个 AI 项目从 0 到 1:完整流程——好的开始,是成功的一半

1 个 AI 项目从 0 到 1:完整流程——好的开始,是成功的一半 这是《AI数字员工系统设计与企业自动化实战》日志连载第 29 篇 作者:老高FDE-AI实战前沿 深度聚焦:企业AI落地实战、AI-Workforce、AI数字员工实战、企业Agent组织设计、…

📅 2026/10/21 18:42:34
深入理解Cargo与crates.io:从构建优化到发布实践

深入理解Cargo与crates.io:从构建优化到发布实践

从 cargo new 跑通第一个 hello world,到能熟练地在项目里加依赖、跑测试,这中间其实隔着一道很有意思的分水岭。很多人对 Cargo 的印象停留在“包管理工具”这六个字上,知道 cargo build 、 cargo run 、 cargo add 这些高频命令&am…

📅 2026/10/21 18:42:34
团队目标管理PPT:从OKR拆解到自动看板的落地闭环

团队目标管理PPT:从OKR拆解到自动看板的落地闭环

简介:这份《团队目标管理.pptx》面向企业管理者、团队负责人及希望提升目标管理能力的职场人,围绕团队目标的作用、常见目标失效原因、目标制定方法与执行落地展开,帮助解决目标模糊、频繁变动、执行脱节等实际问题。资源包内含1个pptx文件&a…

📅 2026/10/21 18:42:34
MORE NEWS

更多资讯

📰

串口不够用?STM32L151+WK2124 SPI转4路串口驱动全记录

串口不够用这个事,做嵌入式的人迟早会撞上。最近我在维护一台低功耗仪表,主控就是标题里的STM32L151,板子上要接的设备却不少:两个传感器、一个显示屏、一个调试口,后端还想留一路备用。这颗芯片原生只带两个UART&…

📰

R语言GARCH建模实战:波动率预测与VaR风险度量全流程

很多做数据分析的朋友第一次接触GARCH模型时,都会先被它那一堆数学符号劝退。但如果你真正面对过股票、汇率或商品价格的日收益率序列,就会发现一个特别明显的事实:价格不是一直在温和波动,而是隔一段时间就剧烈震荡一阵&#xff…

📰

架构图设计实战:从信息结构到工具选型,让技术图真正可读可用

diagram-design,就是把看不见的系统、流程和依赖关系,翻译成别人不用费劲就能看懂的图形表达。我做了快八年的系统设计和交付,越来越觉得很多团队不是不会写代码,而是不会画图。方案评审时一张手绘图讲了三十分钟,听的…

📰

图表设计实战:从信息翻译到可视化落地的完整指南

最近在整理一个叫 diagram-design 的项目,本质上是把图表设计从“随手画一张图”升级成“一套可复用、可解释、可交付的设计流程”。做这事儿的初衷很朴素:我在团队里被各种混乱的架构图、数据看板、流程图折磨过太多次,需求方说“我要一个好…

📰

GPIO从原理到实战:引脚模式、电气匹配与Linux操作全解析

GPIO这三个字母,在嵌入式这行里待过的人都太熟了——通用输入输出接口,通俗讲就是芯片上那些既能当开关又能收信号的小引脚。我最早学单片机时,第一课就是用它点亮一颗LED,当年觉得这有啥难的,后来真进项目才发现&…

📰

USB分析仪实战:HID设备偶发丢包的定位思路与排查方法

打开协议分析仪软件的时候,我心里其实还在打鼓:这个“偶发丢HID包”的问题已经拖了三天,软件层日志翻了几遍,报告序号就是有缺口,可谁也说不清是在哪一段丢的。直到把USB分析仪串进链路,抓了不到二十分钟的…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬