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的区别
2、narray的重要属性
3、NumPy 中的通用函数
exp、sin、cos、add、sqrt等数学函数在 Numpy 中称为通用函数或ufunc
4、解释 NumPy 中的术语“广播”
每当我们有不同维度的数组时,NumPy 都会以统一的方式处理它们,同时执行算术、函数、按位以及逻辑运算。这称为广播。它用于解释逐个元素隐式完成的操作行为。
5、如何将一维数组转换为二维数组?
使用NumPy 提供的np.newaxis和np.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
作者:月亮月亮要去太阳