Python常见面试题(二)——numpy和pandas

一、NumPy和Pandas间的区别与练习

  • 功能定位

NumPy主要用于数值计算,提供了多维数组对象ndarray,支持数组操作线性代数随机数生成等功能。
 Pandas则建立在NumPy之上,提供了更高级的数据结构,主要用于数据分析,尤其是处理表格化数据。

  • 数据结构

NumPy的核心是多维数组对象ndarray,它可以表示任意维度的数组。
Pandas提供了两种主要的数据结构:Series(一维标记数组)和DataFrame(二维带标签的数据表)。

  • 索引方式

NumPy的数组只能使用整数索引访问元素。
Pandas的Series和DataFrame可以使用标签索引(如列名或行名)来访问数据,也可以通过整数位置索引访问。

  • 擅长领域

NumPy特别擅长处理矩阵运算、数值计算等任务。
Pandas适合处理结构化的数据,如数据清洗、数据选择、数据转换等操作。

  • 对缺失数据的处理

NumPy的数组不支持缺失数据,通常会用特殊值(如NaN)表示。

Pandas中的Series和DataFrame提供了更便捷的方法来处理缺失数据,如填充缺失值、删除缺失值等。

  • 其他区别

NumPy 比 Pandas 更快且内存效率更高。

NumPy 主要用于数值计算,而 Pandas 用于更广泛的用途,例如数据分析和可视化。

NumPy 支持使用矩阵和数组数据格式,其中 Pandas 可以与表数据、Excel 文件、CSV 文件等一起使用。

NumPy 使用数组作为其主要对象,并且默认情况下也不索引。Pandas 使用系列和数据框作为其主要对象,并默认提供索引。

联系:

DataFrame 的列是 Series 对象,可以通过列索引对列进行访问和操作。

二、numpy

【介绍】

NumPy 是 Python 中的科学计算包/库。它提供了一个多维的数组对象以及多个派生对象,例如屏蔽数组和矩阵。NumPy 包的核心是ndarray 。它负责封装同质数据类型的 n 维数组,提供优化的代码编译,使其性能非常好。它从根本上用于执行数学和逻辑运算、实现基本线性代数、操作数组形状、排序和选择、I/O、执行离散傅立叶变换等。

【使用numpy的原因及其优势】

快:虽然 Python 列表也是数组,但这些列表的处理时间比 NumPy 数组慢 50 倍,使其成为执行数值和科学计算的最流行的库。(列表存储在随机内存位置,需要更长的时间来访问和处理;NumPy 数组作为 ndarray 存储在一个连续的内存位置,使得操作和计算非常高效和优化)

便利:在 NumPy 中,数组对象称为ndarray,它提供了许多附加功能,使其更快、更易于使用。

1、列表与numpy的区别

  • Python 列表可以动态增长,而 NumPy 数组在创建时的大小是固定的。因此,当我们更改ndarray的大小时,它会删除原始数组并创建一个新数组。
  • 在计算高级数学和包含大量数据的各种其他类型的运算时,NumPy 的性能要高得多。使用 Python 进行计算需要更多代码,而且效率不如 NumPy。
  • NumPy 数组的所有元素的数据类型都相同,因此与 Python 数组不同,它占用固定的内存大小。然而,有一个例外,即可以拥有对象数组(Python 以及 Numpy),允许数组使用不同大小的元素。
  • 许多科学界使用基于 Python 的软件包进行高级计算,其中都包含 NumPy 数组。基于 Python 的序列通常会在预处理数据时转换为 NumPy 数组,并将结果输出为 NumPy 数组。因此,编写高效的基于 Python 的科学计算需要 NumPy 数组的知识。

2、narray的重要属性

  • ndarray.shape – 它输出数组维度。对于包含n 行m 列的矩阵,形状将为(n, m)。要获取给定 array 的轴数请使用 ndarray.ndim 。
  • ndarray.dtype – 它描述数组中包含的元素的数据类型。我们还可以使用标准 Python 指定数据类型。NumPy 还提供了自己的附加数据类型。其中一些示例是numpy.int16、numpy.int32numpy.float64
  • ndarray.itemsize – 它输出给定数组的每个元素的大小(以字节为单位)。它与使用ndarray.dtype.itemsize相同。举例来说,我们有一个包含float64类型元素的数组。它的项目大小将为8 ,这是64/8的结果。另一种情况是当包含的数据类型是complex32时。它的项目大小将为4,即32/8
  • ndarray.data – 它返回保存数组的内存位置或缓冲区。它不经常使用,因为我们使用索引作为对该内存位置的引用来获取数组中包含的元素。

3、NumPy 中的通用函数

exp、sin、cos、add、sqrt等数学函数在 Numpy 中称为通用函数ufunc 

4、解释 NumPy 中的术语“广播”

每当我们有不同维度的数组时,NumPy 都会以统一的方式处理它们,同时执行算术、函数、按位以及逻辑运算。这称为广播。它用于解释逐个元素隐式完成的操作行为。

5、如何将一维数组转换为二维数组?

使用NumPy 提供的np.newaxisnp.expand_dims函数。

6、解释NumPy 中复制视图之间的主要区别

当我们在numpy中使用copy() 函数时,它会创建一个全新的数组。我们在原始数组中所做的更改不会反映在其复制版本中。另一方面,view()函数只是原始数组的反射。无论我们在原始数组中进行什么更改,也都将在使用视图函数调用的数组中实现。

7、用numpy创建DataFrame

#数组创建
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#用np创建dataframe
frame4 = pd.DataFrame(np.arange(9).reshape(3, 3),index=['a', 'c', 'd'],columns=['Ohio', 'Texas', 'California'])

三、pandas

3.1、pandas中的series

【定义】一种类似于一维数组的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。

1、series的建立【列表、字典】、读取、改变(值和索引)、计算、找索引是否在、检查缺失值、命名、对其并执行运算

#建立
obj = pd.Series([4, 7, -5, 3])
obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
#查询
obj.values
obj.index
obj4.name
obj4.index.name
#运算
import numpy as np
np.exp(obj2)
#####in是看索引
'b' in obj2#false
#看空
pd.isnull(obj3)
obj4.isnull()#类方法

2、索引

Pandas 中的 Series 的索引(index)实际上是一个包含每个元素标签的对象,这个对象的数据类型是 pd.Index。在索引为数字 0 1 2 3 的 Series 中,这些标签是整数,而在以字母 a b c d 为索引的 Series 中,这些标签是字符串。从数据处理角度来看,这两种类型的索引都能够进行各种类型的计算和处理。 但是在实际应用中,这两种类型的索引可能存在差异,例如在使用 loc 或 iloc 进行索引时,整数索引可能会造成歧义,因为整数索引和行号索引的用法相同而且重合。在这种情况下,最好使用明确的字符串标签作为 Series 的索引。

3.2、pandas中的DataFrame

DataFrame就像SPSS的数据文件、R的数据框,SAS的dataset

1、dataframe的建立——利用字典

#建立
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'], 'year': [2000, 2001, 2002, 2001, 2002, 2003], 'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}frame = pd.DataFrame(data)
frame.head()
#通过指定列名顺序,可以改变变量顺序
pd.DataFrame(data, columns = ['year', 'state', 'pop'])   
#指定行列标签
frame2 = pd.DataFrame(data, columns = ['year', 'state', 'pop', 'debt'], index = ['one', 'two', 'three', 'four', 'five', 'six'])
pop = {'Nevada': {2001: 2.4, 2002: 2.9, 2003:3.2},'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame3 = pd.DataFrame(pop)#2001是行索引 

2、DataFrame的索引

包含行索引和列索引

#行列索引——先取列再取行
#-1就是最后一行
frame3['Nevada'][:2]#读取列——左行右列
frame2.iloc[1:3,]
#loc是靠label定位或者布尔值,iloc是按照整数的顺序定位
frame2.iloc[1:3,0:2]bool_arr=frame2['pop']>2
result =frame2.loc[bool_arr,]

也可以用切片

3、其他

命名:

#命名和单元格值
frame3.index.name = 'year'; frame3.columns.name = 'state'
frame3.values#这样输出的是会是数组

 删除

del frame2['year']

自动识别缺失

series合进DataFrame
把series赋给DataFrame,会按DataFrame的index来合并,不够的地方用缺失数据来表示:

frame2['debt'] = val

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/15937.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动驾驶场景中的长尾问题怎么解决?

自动驾驶长尾问题是指自动驾驶汽车中的边缘情况,即发生概率较低的可能场景。感知的长尾问题是当前限制单车智能自动驾驶车辆运行设计域的主要原因之一。自动驾驶的底层架构和大部分技术问题已经被解决,剩下的5%的长尾问题,逐渐成了制约自动驾…

huggingface 笔记:查看GPU占用情况

0 准备部分 0.1 创建虚拟数据 import numpy as npfrom datasets import Datasetseq_len, dataset_size 512, 512 dummy_data {"input_ids": np.random.randint(100, 30000, (dataset_size, seq_len)),"labels": np.random.randint(0, 1, (dataset_size…

学习和分享关于 Vue.js 的路由(vue-router)

学习和分享关于 Vue.js 的路由(vue-router)是一个非常有价值的主题,因为路由是构建单页应用程序(SPA)的核心部分。本文将介绍 Vue.js 路由的基本概念和实现,并展示一个典型的项目目录结构。 目录 Vue.js 路…

【代码随想录训练营】【Day 29】【回溯-3】| Leetcode 39, 41, 131

【代码随想录训练营】【Day 29】【回溯-3】| Leetcode 39, 41, 131 需强化知识点 startInex作用:一是处理是否可以有重复值,二是实现纵向遍历(不能没有)去重要在数组有序的前提下进行分割问题 题目 39.…

工业控制2D组态界面,丑是丑了点,但非常实用。

工业控制的2D组态界面是用于监控和控制工业过程的界面。它通常具有以下特征: 实时数据显示:2D组态界面能够实时显示传感器和设备的数据,如温度、压力、流量等。这些数据以图表、仪表盘、数字显示等形式呈现,使操作人员能够实时了解…

Android:使用Kotlin搭建MVVM架构模式

一、简介Android MVVM架构模式 MVVM全称:Model、View、ViewModel; Model:负责数据的请求、解析、过滤等数据层操作,其中Repository: 提供数据的 API(从本地或者网络)。View:负责视图部分展示Vie…

Spring (18)什么是JdbcTemplate

JdbcTemplate 是 Spring 框架提供的一个主要的类,旨在简化传统 JDBC 的使用。它处理了诸如连接管理、异常处理等繁琐的低级任务,让开发者可以更专注于执行 SQL 语句和处理结果。JdbcTemplate 属于 Spring JDBC 模块(spring-jdbc)&…

每日力扣刷题day05(小白简单题)

文章目录 2024.5.26(5题)1446.连续字符题解一题解二 2824.统计和小于目标的下标对数目题解一题解二 1768.交替合并字符串题解一题解二题解三 796.旋转字符串题解一题解二 1304.和为零的 N 个不同整数题解一题解二 2024.5.26(5题) …

快速幂求逆元与逆元

我上一篇博客链接写的是多个数求乘法逆元而快速幂求逆元用于单个数求乘法逆元 逆元是对分数取模用的 对于除法取模不成立,即(a/b)%p≠(a%p/b%p)%p。求逆元的思路:(一般ACM的题目都是对1e97这种素数取模,所以gcd(a,p)1)a*b1(mod p) > b1/a…

[Algorithm][动态规划][简单多状态DP问题][按摩师][打家劫舍Ⅱ][删除并获得点数][粉刷房子]详细讲解

目录 1.按摩师1.题目链接2.算法思路详解3.代码实现 2.打家劫舍 II1.题目链接2.算法思路详解3.代码实现 3.删除并获得点数1.题目链接2.算法思路详解3.代码实现 4.粉刷房子1.题目链接2.算法思路详解3.代码实现 1.按摩师 1.题目链接 按摩师 2.算法思路详解 思路: 确…

大模型提示词Prompt学习

引言 关于chatGPT的Prompt Engineer,大家肯定耳朵都听起茧了。但是它的来由?,怎么能用好?很多人可能并不觉得并不是一个问题,或者说认定是一个很快会过时的概念。但其实也不能说得非常清楚(因为觉得没必要深…

Redis第18讲——Redis和Redission实现延迟消息

即使不是做电商业务的同学,也一定知道订单超时关闭这种业务场景,这个场景大致就是用户下单后,如果在一定时间内未支付(比如15分钟、半小时),那么系统就会把这笔订单给关闭掉。这个功能实现的方式有很多种&a…

unity开发Hololens 制作滑动框

一定要做到最后一步,才会有效果 1、创建空物体 ,并添加组件 创建空物体 命名ScrollingObjectCollection, 添加组件如下图 下面是各个组件展开的内容 2、在ScrollingObjectCollection 下面创建两个空物体,分别命名Container、Clipping…

运筹说 第115期 | 排队论经典例题讲解

通过前几期的学习,我们已经学会了排队论的基本概念、生灭过程和Poisson过程,等待制排队模型、混合制排队模型、其他排队模型以及排队系统优的定义与相关求解方法。在实际工作中,我们能发现排队论在经济管理中有着许多应用,本期小编…

大数据量上传FTP

背景 笔者有一个需求是把将近一亿条数据上传到FTP服务器中,这些数据目前是存储在mysql中,是通过关联几张表查询出来的,查询出来的数据结果集一共是6个字段。要求传输的时候拆分成一个个小文件,每个文件大小不能超过500M。我的测试…

FuTalk设计周刊-Vol.052

#AI漫谈 热点捕手 1.ChatGPT 大更新!GPT-4 开始又变聪明了 OpenAI 官方宣布,新版 GPT-4 Turbo 今天开始向所有付费 ChatGPT 用户开放。 链接https://www.pconline.com.cn/focus/1733/17330089.html 2.刷爆多模态任务榜单!贾佳亚团队Mini-G…

Linux下环境变量配置出错导致基础命令使用不了的问题解决

问题: 当配置环境变量: echo export PATH/home/ubuntu/.local/lib/python3.8/site-packages :$PATH >> ~/.bashrc 执行生效命令 source ~/.bashrc 出现所有的基础操作命令:ls vim都使用不了 解决方式: 1&#xff09…

21.2zabbix低级自动发现-mysql多实例

配置mysql多实例 注释:自动发现:创建监控主机;低级自动发现:创建监控项 mysql单实例是直接yum安装,开启mysql多实例 准备配置文件 #mysql3307实例 cp /etc/my.cnf /etc/my3307.cnf vim /etc/my3307.cnf [mysqld] dat…

lazarus-IDE 可以开发 Node.js 吗?

Lazarus IDE 本身不是用来开发 Node.js 应用程序的工具,因为它是一个用于开发跨平台应用程序的环境,类似于 C Builder 或 Delphi。Node.js 是一个基于 JavaScript 的运行时环境,通常使用 V8 引擎,用于构建异步、事件驱动的服务器端…

产品经理-流程图结构图(四)

1. 流程图 1.1 概念 为了达到特定的目标而进行的一系列有逻辑性的操作步骤,由两个及以上的步骤,完成一个完整的行为的过程,可称之为流程 1.2 产品经理为什么需要绘制流程图? 保证产品的使用逻辑合理顺畅向项目组其他成员清晰的…