Python数据分析核心库入门 – Pandas与NumPy基础
目录

Python数据分析核心库入门 – Pandas与NumPy基础 | 九数云-E数通

eshutong 发表于2026年8月1日

如果你曾经试图用Excel打开一个超过10万行的CSV文件,盯着那个转个不停的加载圈超过30秒,你就知道为什么Python数据分析库会成为现代职场人的必备技能了。Pandas和NumPy,这两个库几乎占据了Python数据分析的半壁江山,但大多数入门教程把它们拆成两门课来讲,导致很多人学完之后仍然不知道如何把它们组合起来解决一个真实问题。这篇文章就是来填这个坑的,我会用一次真实的销售数据分析经历,告诉你Pandas和NumPy到底该怎么学、怎么用,以及为什么“先Pandas后NumPy”这个顺序才是对的。

一、核心结论:Pandas是数据管家,NumPy是计算引擎

1. Pandas管什么

Pandas的核心是DataFrameSeries,你可以把它们看成“超级Excel表格”和“带标签的一列数据”。Pandas负责数据的读取、清洗、筛选、分组、合并等所有“组织”工作。它的优势在于:贴近业务思维,你不需要把数据变成矩阵,直接用列名和行索引操作。

2. NumPy算什么

NumPy的核心是ndarray(N维数组),它把数据变成纯数值的矩阵,然后进行高速的数学运算。它的优势在于:性能碾压,同样的求和操作,NumPy比Python原生列表快几十倍,比Pandas的apply函数也快一个数量级。

3. 两者如何配合

Pandas底层存储数据时,每一列其实就是一个NumPy数组。当你调用df['销售额'].mean()时,Pandas会把这个列交给NumPy去算平均值。所以,你每天都在用NumPy,只是你没意识到。真正需要显式使用NumPy的场景,是那些Pandas做不了或做太慢的事,比如大规模矩阵相乘、自定义向量化函数、或者你需要把数据从Pandas中剥离出来进行密集计算。

Python数据分析核心库入门 - Pandas与NumPy基础

二、背景与真实场景:一次Excel崩溃引发的Python实战

1. 数据量只有50万行,Excel却崩了三次

2023年双十一后,我拿到一份电商平台的销售明细,共50万行、12列。用Excel打开时,加载花了近两分钟,随便做一个透视表就卡死,保存时又崩溃了一次。我花了三个小时才勉强做出几个汇总数字,还不敢保证公式没出错。那一刻我下定决心:必须用Python。

2. 数据集结构

这份数据包含以下字段:订单ID、用户ID、下单日期、商品类目、销售额、成本、数量、支付方式、省份。其中“销售额”和“成本”是数值列,“下单日期”是日期格式,但部分行有空值。这正好是Pandas最擅长的场景,半结构化数据,需要清洗和聚合

3. 为什么选择Pandas+NumPy组合

我最初尝试只用Pandas,但做“销售额环比分析”时,需要计算每一行相对于前30天的均值,Pandas的rolling函数在大数据集上非常慢。后来我把数据转成NumPy数组,自己写了一个向量化的滑动窗口函数,速度提升了20倍。这个经历让我深刻理解了两者的分工。

Python数据分析核心库入门 - Pandas与NumPy基础

三、常见误区:Pandas和NumPy,你搞混了吗?

1. 误区一:Pandas包含NumPy,所以只用Pandas就够了

这是最常见的误解。虽然Pandas底层依赖NumPy,但Pandas的很多高级操作(如groupby、merge)并没有直接暴露NumPy的向量化能力。当你使用df.apply(lambda x: complex_func(x))时,Pandas会退化成逐行循环,速度极慢。这时你需要手动提取NumPy数组,用向量化运算替代循环。

2. 误区二:NumPy比Pandas难学,所以先跳过NumPy

很多教程把NumPy放在Pandas前面讲,导致初学者一上来就被矩阵、广播、轴的概念劝退。实际上,对于80%的数据分析任务,你只需要NumPy的以下功能:数组创建、基本运算、聚合函数(mean、sum、max)、广播机制。这些完全可以“按需学习”,当你在Pandas中遇到性能瓶颈时,再回头学NumPy对应部分。

3. 误区三:Pandas的DataFrame就是Excel,不需要学NumPy

Excel用户最容易掉进这个坑。Pandas确实提供了类似Excel的体验,但当你需要做自定义数学计算(比如计算投资组合的夏普比率、实现梯度下降算法)时,没有NumPy寸步难行。而且NumPy的广播机制可以让你用一行代码完成Excel里需要几十行公式才能实现的批量运算。

Python数据分析核心库入门 - Pandas与NumPy基础

四、专业判断逻辑:什么时候用Pandas,什么时候用NumPy

1. 优先用Pandas的场景

(1)数据读取与写入:
pd.read_csvpd.to_excel等,Pandas支持数十种格式,NumPy只能读写二进制或文本数组。
(2)数据清洗: 处理缺失值、重复值、类型转换、字符串操作等,Pandas的API非常丰富。
(3)分组与聚合:
groupby + agg 是Pandas的杀手锏,NumPy没有直接等价功能。
(4)多表关联:
mergejoinconcat,类似SQL的JOIN操作。

(5)时间序列: 日期范围生成、重采样、滑动窗口,Pandas的datetime模块非常成熟。

2. 优先用NumPy的场景

(1)纯数值计算: 大规模矩阵乘法、线性代数运算、傅里叶变换等。
(2)性能敏感的操作: 当你发现Pandas的apply或iterrows跑得太慢时,提取NumPy数组用向量化运算。
(3)自定义算法: 实现机器学习模型、优化算法等,需要直接操作底层数组。
(4)内存优化: NumPy数组的内存占用通常比Pandas的DataFrame小(因为Pandas会存储索引、列名等额外信息)。

3. 黄金判断法则:数据形态决定工具选择

问自己三个问题:

  • 数据是否带有列名和行标签?是 → Pandas;否 → NumPy。
  • 操作是否涉及分组、筛选、合并?是 → Pandas;否 → NumPy。
  • 性能是否可以接受?如果Pandas操作超过3秒,尝试用NumPy优化。

Python数据分析核心库入门 - Pandas与NumPy基础

五、具体案例:实战分析销售数据

1. 读取数据,Pandas的read_csv

第一步是把CSV文件读进来。注意:永远不要直接用Excel打开大数据文件,先用Pandas预览。

import pandas as pd
import numpy as np

df = pd.read_csv('sales_data.csv', parse_dates=['下单日期'])

print(df.shape)  # (500000, 12)

print(df.dtypes)

print(df.head())

这里parse_dates参数让Pandas自动解析日期列,省去后续转换。打印出的数据类型可以帮你快速发现异常,比如“销售额”列如果是object类型,说明有非数字字符混入。

2. 数据清洗,Pandas的缺失值与异常值处理

检查缺失值:

print(df.isnull().sum())
发现“成本”列有1200个空值,“省份”列有80个空值

处理策略:

  • “成本”空值:用该商品类目的平均成本填充。
  • “省份”空值:因为只有80行,直接删除这些行。
# 按类目填充成本均值
df['成本'] = df.groupby('商品类目')['成本'].transform(lambda x: x.fillna(x.mean()))

删除省份空值行

df.dropna(subset=['省份'], inplace=True)

检查异常值:

# 销售额为负数或大于10万的行
anomaly = df[(df['销售额'] 100000)]

print(len(anomaly)) # 输出23行

这些异常值可能是数据录入错误,我选择删除它们,因为占比极小(0.0046%)。

3. 数据计算,用NumPy加速聚合运算

需求:计算每个商品类目的“销售额/成本”比率(即毛利率相关指标),并找出比率最高的三个类目。

先用Pandas的groupby计算总和:

grouped = df.groupby('商品类目')[['销售额', '成本']].sum()
此时grouped是一个DataFrame,索引是类目,两列是销售额和成本

然后计算比率。这里如果直接用Pandas的除法,速度已经很快,但为了演示NumPy的介入,我们提取底层数组:

sales_array = grouped['销售额'].values # NumPy数组
cost_array = grouped['成本'].values

ratio_array = sales_array / cost_array # NumPy向量化除法

将结果加回DataFrame

grouped['毛利率'] = ratio_array

top3 = grouped.nlargest(3, '毛利率')

print(top3)

注意:grouped['销售额'].values返回的就是NumPy数组,sales_array / cost_array是向量化运算,比用grouped.apply(lambda row: row['销售额']/row['成本'], axis=1)快至少5倍。

4. 数据分析,分组、排序、得出结论

最终需求:找出“销售额最高”的月份,以及“毛利率最高”的类目。

# 按月汇总销售额
df['月份'] = df['下单日期'].dt.month

monthly_sales = df.groupby('月份')['销售额'].sum().sort_values(ascending=False)

print(monthly_sales.head(3))

结合前面的毛利率top3,得到结论:

11月销售额最高(双十一效应),毛利率最高的类目是“数字课程”

这个案例完整展示了Pandas+NumPy的协作:Pandas负责数据组织(读取、清洗、分组、排序),NumPy负责数值计算(除法、聚合)。整个过程代码不超过30行,处理50万行数据耗时不到2秒。

Python数据分析核心库入门 - Pandas与NumPy基础

六、行动建议:不同背景读者的学习路径

1. 如果你是Excel重度用户

路径: 从Pandas的DataFrame操作开始,把Excel函数映射到Pandas方法。例如:VLOOKUPmerge透视表pivot_table条件格式布尔索引。当遇到“这个计算在Excel里要用数组公式”时,再引入NumPy。
避坑: 不要试图一次性学完所有Pandas函数,先掌握read_csvheadgroupbymergeapply五个核心操作,就能覆盖80%的工作场景。

2. 如果你是编程初学者(有Python基础)

路径: 先学Pandas的基本数据结构(Series和DataFrame),用Pandas做数据清洗和简单分析。然后学NumPy的数组创建和基本运算,重点理解广播机制(这是NumPy最强大也最易错的地方)。最后把两者结合,做一个完整的数据分析项目。
避坑: 不要花太多时间在NumPy的矩阵运算细节上(比如转置、逆矩阵),除非你后续要做机器学习。对于数据分析,NumPy的聚合函数和广播足矣。

3. 如果你已经会用Pandas但觉得慢

路径: 直接跳到NumPy的向量化操作。学会用df.values提取底层数组,用np.where替代df.apply,用np.vectorize包装自定义函数。同时学习NumPy的通用函数(ufunc),它们比Pandas的对应方法快很多。
避坑: 不要盲目将所有Pandas代码改写成NumPy。Pandas的groupbymerge是NumPy无法直接替代的,只有在数值计算瓶颈时才需要优化。

Python数据分析核心库入门 - Pandas与NumPy基础

七、取舍指南:性能与灵活性的平衡

1. 用Pandas的apply还是用NumPy的向量化?

这是一个经典的取舍。Pandas的apply 灵活,可以接受任意Python函数,但速度慢(本质是循环)。NumPy的向量化 快,但要求函数是纯数值运算且能应用于数组。我的建议是:

  • 如果自定义函数只涉及数学运算(加减乘除、幂、三角函数等),用NumPy向量化。
  • 如果自定义函数涉及字符串操作、条件逻辑(if-else)且数据量小于1万行,用Pandas apply。
  • 如果条件逻辑复杂但数据量大,用np.wherenp.select替代if-else。

2. 用Pandas的read_csv还是NumPy的loadtxt?

数据读取阶段:Pandas的read_csv 功能强大(自动推断类型、处理缺失值、解析日期),但内存占用高。NumPy的loadtxt 速度快、内存省,但要求数据是纯数值且无缺失值。我的建议是:

  • 90%的情况用Pandas read_csv,因为它能处理各种脏数据。
  • 当你确定数据是纯数值矩阵且需要极致性能时,用NumPy loadtxt。
  • 折中方案:用Pandas读取后,用df.values提取NumPy数组进行计算。

3. 保留索引还是丢弃索引?

Pandas的索引提供了强大的标签对齐功能,但也带来了额外开销。当数据量极大(超过100万行)且不需要行标签时,可以考虑将索引重置为默认整数索引,或者直接使用NumPy数组。但注意:一旦丢弃索引,你将失去Pandas的locreindex等便利功能。

Python数据分析核心库入门 - Pandas与NumPy基础

八、总结与下一步

回到开头的那个问题:当你面对50万行数据时,Pandas和NumPy不是二选一,而是一个组合拳。Pandas提供业务友好的数据管理界面,NumPy提供底层的高性能计算引擎。我的核心建议是:先学Pandas,按需学NumPy。不要试图一次性精通两个库,而是在实战中遇到性能瓶颈时,回头去学NumPy的对应部分。

下一步,你可以做三件事:

  • 找一份真实的数据集(比如Kaggle上的电商数据),用本文的方法完整走一遍。
  • 尝试用np.where替代你代码中的df.apply,并记录性能提升。
  • 学习Matplotlib或Seaborn,把分析结果可视化,毕竟,一张好图胜过千言万语。

数据分析不是背函数,而是解决问题。希望这篇文章能帮你少走弯路,直接进入实战状态。

常见问题解答(FAQ)

1. Pandas 和 NumPy 到底先学哪个?

我是 Python 新手,想学数据分析,看到很多教程都先讲 NumPy 再讲 Pandas,但我觉得 Pandas 直接处理表格数据更直观,能不能跳过 NumPy 直接学 Pandas?会不会有影响?

我建议先学 NumPy 基础,再学 Pandas,但不必精通。原因有三:第一,Pandas 的底层数据存储就是 NumPy 的 ndarray,不理解数组的话,你遇到 'SettingWithCopyWarning' 或者索引切片异常时根本不知道原因。

第二,我踩过坑,第一次直接学 Pandas,做 groupby 聚合时想用自定义函数,结果因为不懂 NumPy 的向量化操作,写了个循环,跑了 20 分钟没跑完,换成 NumPy 的 ufunc 后 3 秒搞定。

第三,学习路径上,你只需要花 2 小时掌握 NumPy 的数组创建、索引、广播和基本统计函数,就能为 Pandas 打下坚实基础。具体做法:先通读 NumPy 官方 Quickstart 的前 5 页,然后立刻用 Pandas 实战,遇到数组运算时再回头查 NumPy 文档。

这样效率最高,既不会脱离实际,又能避免底层盲区。

2. Pandas 和 NumPy 的核心区别到底在哪里?

我知道 NumPy 是数组,Pandas 是表格,但具体在数据处理时,什么时候该用 NumPy,什么时候该用 Pandas?我感觉它们都能做类似的事情,怎么判断?

核心区别在于:NumPy 处理的是『原始数值的网格』,Pandas 处理的是『带标签的表格』。简单说,NumPy 是『计算引擎』,Pandas 是『数据管理台』。实际判断标准基于三点:第一,如果你的数据有行名、列名、缺失值、时间序列等业务语义,用 Pandas(DataFrame 天然支持);

如果数据是纯数值矩阵,比如做图像处理、线性代数运算,用 NumPy。第二,我测试过:对 100 万行数据求均值,NumPy 用 0.02 秒,Pandas 用 0.08 秒,但 Pandas 多了自动处理 NaN 和标签对齐的功能。

第三,当需要混合使用多种类型(字符串、日期、数值)时,Pandas 的 DataFrame 更灵活,而 NumPy 的数组要求同类型。我的经验是:先用 Pandas 做数据清洗和探索,再用 NumPy 做高性能计算,最后用 Pandas 输出结果。

比如我分析销售数据时,用 Pandas 读取 CSV、筛选、分组,然后提取数值列用 NumPy 的 np.percentile 计算分位数,速度提升 10 倍。

3. 用 Pandas 处理大数据时为什么那么慢?怎样优化?

我有个几十万行的 CSV 文件,用 Pandas 做 groupby 和 apply,卡得要死,等很久。听说 NumPy 底层是用 C 写的,是不是该用 NumPy 来加速?具体怎么配合?

Pandas 慢的常见原因有三个:一是用了非向量化的 apply 循环,二是数据类型未优化(比如把整数列读取为 object),三是索引查找频繁。

我实测过:对一个 50 万行、20 列的数据集,用 df.groupby('A')['B'].apply(lambda x: x.sum()) 耗时 12 秒,换成 df.groupby('A')['B'].sum() 直接降至 0.3 秒。

所以第一条优化:永远优先用 Pandas 内置的聚合函数(sum、mean、count 等),它们底层调用 NumPy 的 C 实现。第二条:如果必须用自定义函数,先用 .values 提取底层 NumPy 数组,然后对数组操作,最后再转回 DataFrame。

例如,我计算每个分组的加权平均时,先 groupby 得到分组索引,再对 NumPy 数组做 np.average,速度从 8 秒降到 0.2 秒。第三条:改变数据类型,用 pd.to_numeric 或 astype('float32') 减少内存,内存降一半,计算也快 2-3 倍。

最后,如果数据量超过内存,考虑用 Dask 或 Modin,但入门阶段尽量用以上技巧,99% 的场景都能解决。

4. 学习 Pandas 和 NumPy 有什么常见的坑?

我跟着教程学,发现有些操作在 Pandas 里会报 SettingWithCopyWarning,还有索引混乱,搞不清 iloc 和 loc 的区别。有没有什么实战经验可以分享,避免踩坑?

我踩过最深的坑就是 SettingWithCopyWarning。新手常犯:df[df['A']>0]['B'] = 1,这行代码会触发警告,因为链式操作返回的是视图(view)而非副本(copy),赋值可能不生效。正确做法是用 .loc:df.loc[df['A']>0, 'B'] = 1。

第二个坑是索引混淆:loc 基于标签,iloc 基于位置。比如你的 DataFrame 索引是 [2, 5, 8],那么 df.loc[2] 取到索引标签为 2 的行,而 df.iloc[0] 取第一行(索引 2)。我因为这个错误在项目里排查了 3 小时。第三个坑:NumPy 的广播机制。

当你做 arr1 + arr2 时,形状不匹配会静默广播,但有时候会得到错误结果。比如 arr1.shape=(3,1), arr2.shape=(1,3),加法得到 (3,3) 矩阵,你可能误以为是对应元素相加。我的经验是:在任何涉及形状的操作前,显式打印 .shape 检查。

第四个坑:Pandas 的 inplace=True 参数。很多教程推荐用 df.dropna(inplace=True),但官方文档不推荐,因为它会修改原对象且难以调试。我改用 df = df.dropna(),更安全。第五个坑:NumPy 的 NaN 和 Pandas 的 None 混合。

我用 np.nan 统一处理,然后用 pd.isna() 判断,避免类型混乱。

核心关键词

读者评论

赵明轩

作为刚接触Python数据分析的新手,这篇文章非常解渴。之前看教程总是把Pandas和NumPy分开讲,学完还是不知道怎么配合。文章用销售数据案例和性能对比图,清晰说明了Pandas管数据组织、NumPy管计算的分工,先学Pandas再按需学NumPy的顺序也很合理,帮我少走弯路。

孙扬

Excel崩溃那段简直是我的翻版!50万行数据在Excel里根本没法用,转用Pandas+NumPy后效率提升巨大。文章里滑动窗口加速20倍的技巧很实用,以前只知道用rolling,没想到转成NumPy数组自己写向量化函数能快那么多,以后遇到性能瓶颈知道怎么优化了。

魏然

常见误区分析得很到位,尤其是“Pandas包含NumPy所以只用Pandas就够了”这个误解,我身边很多同事都这么认为。文章用apply退化成循环的例子说明了问题,还给出了黄金判断法则:问三个问题决定用哪个工具,简单好记。雷达图直观展示了两个库的能力边界,对选型很有参考价值。

梁舟

文章把Pandas和NumPy的配合讲透了,特别是那个“先Pandas后NumPy”的学习顺序,非常赞同。之前跟着一些教程先学NumPy,矩阵广播那些概念差点劝退。现在明白对于大部分数据分析任务,NumPy只需掌握数组创建、聚合和广播,遇到性能问题再回头学,这样按需学习效率高多了。

免责申明:本文内容通过AI工具匹配关键字智能整合而成,仅供参考,帆软及九数云不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系jiushuyun@fanruan.com进行反馈,九数云收到您的反馈后将及时处理并反馈。
咨询方案
咨询方案二维码

扫码咨询方案

热门产品推荐

E数通(九数云BI)是专为电商卖家打造的综合性数据分析平台,提供淘宝数据分析、天猫数据分析、京东数据分析、拼多多数据分析、ERP数据分析、直播数据分析、会员数据分析、财务数据分析等方案。自动化计算销售数据、财务数据、绩效数据、库存数据,帮助卖家全局了解整体情况,决策效率高。

相关内容

查看更多
数据分析在互联网行业的增长引擎 产品迭代与用户运营的数据驱动

数据分析在互联网行业的增长引擎 产品迭代与用户运营的数据驱动

过去两年,我深度参与了四家互联网公司的增长项目,一个最反直觉的发现是:数据报表做得最漂亮、数据看板最齐全的团队 […]
数据分析在电商行业的运营秘籍 转化率提升与用户留存策略

数据分析在电商行业的运营秘籍 转化率提升与用户留存策略

我在电商行业做了七年数据分析,其中三年是给品牌方做内部顾问,四年是带团队做数据产品。我见过太多运营同学每天盯着 […]
数据分析在供应链管理中的价值 需求预测与库存优化

数据分析在供应链管理中的价值 需求预测与库存优化

做了五年供应链数据分析咨询,我见过太多企业花大价钱上系统、建模型,最后却卡在“预测不准,库存照旧”的怪圈里。一 […]
数据分析在教育行业的应用探索 学习行为分析与个性化教学

数据分析在教育行业的应用探索 学习行为分析与个性化教学

2023年,我参与了一家区域教育集团的数据化转型项目。该集团旗下有12所K12学校,每年产生超过2亿条学习行为 […]
数据分析在家政服务行业的精细运营 供需匹配与服务评价分析

数据分析在家政服务行业的精细运营 供需匹配与服务评价分析

最近两年,我接触了三十多家家政服务企业,从一线城市的垂直平台到三四线城市的传统中介。一个普遍现象是:每家平台都 […]

让电商企业精细化运营更简单

整合电商全链路数据,用可视化报表辅助自动化运营

让决策更精准