numpy和pandas入门

本文介绍了Python数据分析必备的numpy和pandas库,讲解了numpy的ndarray和数据类型,以及pandas的Series和DataFrame结构,涵盖了索引、数据操作、数据类型转换和高级功能如DataFrame查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天开始进入Python数据分析工具的教程。

数据分析绝对绕不过的三个包是numpy、scipy和pandas。numpy是Python的数值计算扩展,专门用来处理矩阵,它的运算效率比列表更高效。scipy是基于numpy的科学计算包,包括统计、线性代数等工具。pandas是基于numpy的数据分析工具,能更方便的操作大型数据集。后续的章节主要围绕pandas讲解。

numpy和pandas
numpy的数据结构是n维的数组对象,叫做ndarray。Python的list虽然也能表示,但是不高效,随着列表数据的增加,效率会降低。

我们首先载入numpy包,因为它是第三方工具,所以每次使用前必须在代码中载入。as是命名为别名,方便调用,np是numpy约定俗成的简写。
在这里插入图片描述
创建数组使用numpy中的array函数,新手要记住加np。我们将系统自带的列表list转换成了numpy中的数组。
在这里插入图片描述

嵌套列表会被转换为一个多维数组,它也可以被称为矩阵。

array数组需要注意的是,它内部的元素必须为相同类型,比如数值或者字符串。可以用dtype查询其类型,不用加括号。
在这里插入图片描述
numpy的数据类型比较丰富,包括int8,int16,int32等,不过这块更接近计算机底层,数据分析用不太到。当我们想转换数据格式时,可以用astype函数。
在这里插入图片描述
数组的计算非常方便,不要大量的循环即可批量运算。
在这里插入图片描述
数组索引和列表相同,通过方括号和数字即可选择,也可直接赋值。
在这里插入图片描述
可以通过递归对多维数组进行筛选,如果省略了后面的索引,则返回次一级的维度,这一点和list一样。
在这里插入图片描述
numpy除了上述的基础操作之外,还有reshape、T转置、ufunc、sort等函数,功能强大,大家可以自行查阅文档学习,这里我不再花费时间讲解。对于数据分析师,pandas是一个更常用的包,在抽象概念上它更接近我们熟悉的excel和sql,也是最主要的分析工具。

pandas有两个主要的数据结构,Series和DataFrame,记住大小写区分,后续使用中不多提醒。Series类似于一维数组,和numpy的array接近,由一组数据和数据标签组成。数据标签有索引的作用。
在这里插入图片描述
加载pandas包,通过Series函数生成一个对象。我们很明显地看到,在jupyter上它的样式不同于array,它是竖着的。右边是我们输入的一组数据,左边是数据的索引,即标签。数据标签是pandas区分于numpy的重要特征。

索引不一定是从0开始的数字,它可以被定义。
在这里插入图片描述
索引的概念有点像SQL的主键,不过它的功能更强大,分析师能够很轻松的通过索引选取一个数据或者一组数据。
在这里插入图片描述
index函数可以显示Series的索引。Series和array一样,通过方括号选取数据,当要选取多个数据时,应该用列表表示多个索引,所以第三个案例嵌套了两层方括号。

如果数据是一个字典,也能直接通过这个字典创建Series。
在这里插入图片描述
此时,字典的key就是Series的索引
在这里插入图片描述
Series有自动对齐索引的功能,当自定义的索引qinqin和字典队员不上时,会自动选择NaN,即结果为空,表示缺失。缺失值的处理会在后续讲解。
DataFrame
Series是一维的数据结构,DataFrame是一个表格型的数据结构,它含有不同的列,每列都是不同的数据类型。我们可以把DataFrame看作Series组成的字典,它既有行索引也有列索引。想象得更明白一点,它类似一张excel表格或者SQL,只是功能更强大。

构建DataFrame的方法有很多,最常用的是传入一个字典。
在这里插入图片描述
DataFrame会自动补充索引,并且将字典的key作为列标签,即column。在这里,dict的key顺序是DataFame的顺序,不再是无序的。

DataFrame中可以通过info函数直接查看数据类型和统计。
在这里插入图片描述
列名后面是列的非空值统计量,以及数据类型,最后一行是DataFrame占用的内存大小,对于pandas来说,千万行几百兆的数据也是不再话下的。
在这里插入图片描述
DataFrame的数据类型变更和numpy一样,用astype就行,记住要赋值。df.age = df.age.astype,图上只是举例,没有真的更改数据类型。

DataFrame的索引方式和Series一样,它选取的是列。
在这里插入图片描述
返回的是一组Series,索引和原DataFrame一致。除了方括号选取,DataFrame还有更简单的选取方法。
在这里插入图片描述
行也可以通过通过位置获取,用索引字段ix的方式。
在这里插入图片描述
第二个方法不需要调用ix,直接以切片的形式获取行,切片的用啊和数组一样。记住,切片无法用单独的数字选取,只能用冒号切选范围。

列可以通过赋值的方式修改和添加,当列的名称是全新,则会在DataFrame的最右边自动加上新的一列。
在这里插入图片描述
列表和数组都可以赋值到列,长度必须匹配,列表是按照顺序,数组的话,可以按index参数设置的索引对应,若为空,则填上缺失值。

DataFrame的index不可更改,这是为了数据的安全性,但我们能通过index函数获取详情。
在这里插入图片描述
DataFrame在数据选取上面非常强大。
在这里插入图片描述
它支持常用的逻辑判断,例子中,后两种数据选取是通过布尔数组过滤出我们想要的结果。
在这里插入图片描述
df.sex == '男’返回了一个布尔数组(记住,是两个等号,一个等号是赋值),然后通过布尔数组找出df中符合条件为true的结果。

现在我们希望找出年龄在20以下,且性别为男的人。
在这里插入图片描述
这里用到布尔类型数据的计算公式,true and true 为true,false and true 为false。pandas中的逻辑符号,并且是&,或者是|。接下来过滤出性别为女,或者年龄为18的人。
在这里插入图片描述
当逻辑条件复杂时,这种写法并不优雅,比如性别为男,且年龄在18岁,以及性别为女,且年龄在18岁以上的两类人群,这种过滤条件就比较复杂了。pandas中可以用query函数以类SQL语言执行查询。
在这里插入图片描述
query中可以直接使用列名,它的功能远不至于此,大家有兴趣可以深入学习。
在这里插入图片描述
DataFrame可以直接在列上进行运算,当DataFrame和DataFrame之间运算时,按索引进行加减乘除。
在这里插入图片描述
如果直接用加法,若列名匹配不上,会产生NaN 的缺失值,我们可以在后续后续fillna函数填充。另外一种方法是add函数,它可以直接通过参数选择填充值。减乘除对应sub、mul、div。

DataFrame还有两个常用函数,又特别容易搞混的是,iloc和loc。
在这里插入图片描述
它们都是通过索引选取行,iloc是通过所在行的数字为索引,loc是所在行的标签为索引,简单讲,iloc是第几行,loc是标签。当索引没有标签时,loc和iloc等价。两者支持冒号的范围选择。

上文提到的过的ix,则是两者的混合,即可以行号,也可以行索引。

当行和列需要同时选择的时候,用逗号分割,逗号前是想要选择的行,逗号后是想要选择的列。
在这里插入图片描述
完整形式是ix[ 行1:行2, 列1:列2 ],iloc和loc也支持行列同时选择,方法一样。新人接触这几块比较容易混淆。后续联系即可掌握。

大家如果想加深掌握这块,除了敲一遍代码,可以阅读「利用Python进行数据分析」,很经典的入门书(部分内容有点老)。也可以多拿工作中的报表做练习。

到这里,numpy和pandas的基础就讲解的差不多了,更深入的应用,还是用实战解决吧!下一章,将会用大家已经很熟悉的练习数据,以实际操作的方式完成一次数据分析。

转自:numpy和pandas入门 - 秦路的文章 - 知乎
https://zhuanlan.zhihu.com/p/27624814

<think>嗯,用户现在问的是numpypandas的区别。首先,我需要确认用户是不是打错了,因为“padas”可能是指“pandas”。如果是的话,那这个问题就比较常见了,但还是要先确认。不过根据上下文,之前用户提到了Pythonnumpy.random.randn(),所以很可能确实是pandas。 接下来,我需要回顾numpypandas的主要区别。用户可能刚开始学习Python数据分析库,对这两个库的用途功能不太清楚。他们可能想知道什么时候用numpy,什么时候用pandas,或者两者是否可以结合使用。 首先,numpy是用于数值计算的,处理多维数组,尤其是数值数据。它提供了高效的数组操作数学函数。而pandas则是建立在numpy之上的,主要用于数据处理分析,特别是表格数据,比如CSV文件或SQL查询的结果。pandas的DataFrame结构非常适合处理带标签的行列,而numpy的数组没有这样的标签。 用户可能想知道这两者的核心差异,比如数据结构、功能定位、性能以及应用场景。需要分点说明,结构清晰。同时,用户可能需要一些例子来理解这些差异,比如numpy处理矩阵运算,pandas处理数据清洗操作。 另外,用户可能还关心在什么情况下选择哪个库。例如,如果是进行数学计算、线性代数,或者需要高性能的数组操作,numpy更合适。如果是数据预处理、清洗、统计分析,或者需要处理带有时间序列的数据,pandas更适合。 还要注意,虽然pandas基于numpy,但它们有不同的API功能。例如,pandas提供了很多数据操作的方法,如合并数据集、处理缺失值、分组聚合等,这些在numpy中并不直接支持。而numpy则更擅长于数值运算,如矩阵乘法、傅里叶变换等。 用户可能的深层需求是理解如何有效利用这两个库进行数据分析项目,或者在学习过程中如何区分它们的用途。因此,给出对比表格实际应用场景的例子会很有帮助。 最后,需要确保回答准确,没有混淆两者的功能,并且用简单易懂的语言解释,避免使用过多术语,同时提供足够的信息帮助用户做出选择。</think>以下是关于NumPyPandas的对比说明,以帮助您理解两者的核心区别应用场景: --- ### **1. 基础定位** | **库** | **核心用途** | **数据模型** | |----------|-------------------------------------|----------------------------| | **NumPy** | **数值计算**(数学运算、矩阵操作、科学计算) | 多维数组(`ndarray`),仅支持数值类型 | | **Pandas** | **数据处理与分析**(表格数据清洗、统计、时间序列) | 带标签的二维表(`DataFrame`)一维序列(`Series`),支持混合数据类型 | --- ### **2. 核心差异** #### **(1) 数据结构** - **NumPy** - 核心是**多维数组(`ndarray`)**,例如: ```python import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组 ``` - **特点**:高效存储操作数值数据,但不支持列名、行索引等标签。 - **Pandas** - 核心是**`DataFrame`(二维表)****`Series`(一维序列)**,例如: ```python import pandas as pd df = pd.DataFrame({"姓名": ["Alice", "Bob"], "年龄": [25, 30]}) # 带列名的表格 ``` - **特点**:支持行/列标签、混合数据类型(数值、字符串、时间等)。 #### **(2) 功能定位** | **功能** | **NumPy** | **Pandas** | |-----------------------|------------------------------------|-------------------------------------| | **数学运算** | 矩阵乘法、傅里叶变换、线性代数运算 | 依赖NumPy,但更关注统计聚合(如分组求、均值) | | **数据操作** | 数组切片、广播机制 | 数据合并(`merge`)、透视表(`pivot_table`)、缺失值处理(`dropna`) | | **输入输出** | 支持文本文件、二进制文件 | 直接读取Excel、CSV、SQL数据库等结构化数据 | | **时间序列处理** | 无原生支持 | 强大的时间序列功能(如重采样、时区转换) | #### **(3) 性能** - **NumPy**:底层由C实现,**纯数值计算速度更快**(例如大规模矩阵运算)。 - **Pandas**:基于NumPy,但**处理带标签的表格数据更高效**(例如按列筛选、分组统计)。 --- ### **3. 应用场景对比** #### **何时用NumPy?** - 需要高性能的数值计算(如深度学习模型中的张量运算)。 - 操作多维数组且无需复杂的数据标签。 - 实现数学公式(如矩阵分解、随机数生成)。 #### **何时用Pandas?** - 处理表格数据(如CSV、Excel文件)的清洗、过滤、统计。 - 需要处理时间序列(如股票数据、传感器记录)。 - 数据预处理(如缺失值填充、合并多个数据集)。 --- ### **4. 协同工作** - **Pandas底层依赖NumPy**:`DataFrame``Series`内部使用NumPy数组存储数据。 - **混合使用示例**: ```python import numpy as np import pandas as pd # 生成正态分布数据(NumPy) data = np.random.randn(100, 3) # 100行3列的数组 # 转换为DataFrame并添加列名(Pandas) df = pd.DataFrame(data, columns=["A", "B", "C"]) df["A"].mean() # 计算列A的均值(Pandas调用NumPy实现) ``` --- ### **5. 直观对比表格** | **特性** | **NumPy** | **Pandas** | |------------------|--------------------------|---------------------------| | 核心数据结构 | `ndarray`(多维数组) | `DataFrame`(二维表)、`Series`(一维序列) | | 数据类型支持 | 仅数值类型 | 数值、字符串、时间、分类等混合类型 | | 数据标签 | 无 | 支持行索引列名 | | 适用场景 | 数学计算、科学运算 | 数据分析、数据清洗、统计建模 | --- ### **总结** - **NumPy**:专注于**数值计算**,适合底层数学操作高性能数组处理。 - **Pandas**:专注于**数据分析**,适合处理带标签的表格数据,提供丰富的清洗统计功能。 - **实际项目中通常联合使用**:先用Pandas加载清洗数据,再转换为NumPy数组进行模型计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值