df.shape返回行和列的数量。 df.info()总结了所有相关信息 还可以将一个或几个列设置为索引。...第二种情况,它对行和列都做了同样的事情。向Pandas提供列的名称而不是整数标签(使用列参数),有时提供行的名称。...下一个选择是用NumPy向量的dict或二维NumPy数组构造一个DataFrame: 请注意第二种情况下,人口值是如何被转换为浮点数的。实际上,这发生在构建NumPy数组的早期。...例如,插入一列总是在原表进行,而插入一行总是会产生一个新的DataFrame,如下图所示: 删除列也需要注意,除了del df['D']能起作用,而del df.D不能起作用(在Python层面的限制...然而,另一个快速、通用的解决方案,甚至适用于重复的行名,就是使用索引而不是删除。
= False, ndmin = 0) 参数说明: 名称描述object数组或嵌套的数列dtype数组元素的数据类型,可选copy对象是否需要复制,可选order创建数组的样式,C为行方向,F为列方向...external_loop给出的值是具有多个值的一维数组,而不是零维数组 广播迭代 如果两个数组是可广播的,nditer 组合对象能够同时迭代它们。...例如,一个数组的形状改变也会改变另一个数组的形状。 视图或浅拷贝 ndarray.view() 方会创建一个新的数组对象,该方法创建的新数组的维数更改不会更改原始数据的维数。...使用切片创建视图修改数据会影响到原始数组。 副本或深拷贝 ndarray.copy() 函数创建一个副本。 对副本数据进行修改,不会影响到原始数据,它们物理内存不在同一位置。 ...NumPy 矩阵库(Matrix) NumPy 中包含了一个矩阵库 numpy.matlib,该模块中的函数返回的是一个矩阵,而不是 ndarray 对象。
2 警告是什么 首先要理解的是,SettingWithCopyWarning 是一个警告,而不是错误 Erro,警告的作用是提醒程序员,他们的代码可能存在潜在的错误或问题,但是这些操作仍然是该编程语言中的合法操作...在采取下一步行动之前,花点时间了解为什么会获得这一警告。...,也就是重新生成了一个对象,然后再对满足条件的行,其列score赋值,当然和原数据没有任何关系了。...Pandas 确定返回一个视图还是一个副本的逻辑,源于它对 NumPy 库的使用,这是 Pandas 库的基础。视图实际上是通过 NumPy 进入 Pandas 的词库的。...Pandas 兼顾多种索引功能,并且保持高效地使用其 NumPy 内核的能力。 最终,Pandas 中的索引被设计为有用且通用的方式,其核心并不完全与底层 NumPy 数组的功能相结合。
总结,种种原因,NumPy为我们,或者说数据学习者、工作者提供了一个强大、高效且易于使用的工具,使得咱们能够更专注于数据的分析和模型的构建,而不是低级的数值计算。...也可以当做一个小册子,拿来即用,立即套到自己的实际应用中。 1. 数组创建 numpy.array(): 从常规Python列表或元组创建数组。...numpy.argmax(), numpy.argmin(): 查找数组中最大或最小元素的索引。 numpy.where(): 根据条件返回数组中的索引。...灵活地组合和分解数组以满足数据处理的需求。 13. 数组的复制和视图 .copy(): 创建数组的深度副本。 视图(View): 创建数组的浅副本,当原数组改变时,视图也会跟着改变。...这些代码示例展示了深度副本和视图(浅副本)之间的区别:深度副本不影响原始数组,而视图的修改会影响原始数组。 14. 条件逻辑 numpy.where(): 用于基于条件选择数组元素。
数组索引:访问单个元素 如果你熟悉 Python 的标准列表索引,NumPy 中的索引将会非常眼熟。..., [ 8, 8, 6, 7], [ 4, 2, 5, 12]]) ''' 访问数组的行和列 一个常用的例程是访问数组的单个行或列。...数组切片的一个重要且非常有用的事情,是它们返回视图而不是数组数据的副本。...创建数组的副本 尽管数组视图具有很好的特性,但有时显式复制数组或子数组中的数据也很有用。...在可能的情况下,reshape方法将使用初始数组的非副本视图,但对于非连续的内存缓冲区,情况并非总是如此。 另一种常见的形状调整是将一维数组转换为二维行或列矩阵。
/reference/arrays.html ndarray是numpy中的多维数组,数组中的元素具有相同的类型,且可以被索引。...,而是用于创建np.ndarray对象的其中一个函数,numpy中多维数组的类为np.ndarray。...视图是数据的一个别称或引用,通过该别称或引用亦便可访问、操作原有数据,但原有数据不会产生拷贝。如果我们对视图进行修改,它会影响到原始数据,物理内存在同一位置。...可大致划分成2部分——对应设计哲学中的数据部分和解释方式: raw array data:为一个连续的memory block,存储着原始数据,类似C或Fortran中的数组,连续存储 metadata...NumPy 副本和视图
标准数据类型numpy数组的基本操作NumPy数组的属性数组索引:获取单个元素数组切片:获取子数组非副本视图的子数组创建数组的副本数组的变形数组拼接和分裂 《Python数据科学手册》读书笔记 理解Python...以下是几个示例: # 创建一个所有值为0,长度为10的数组 np.zeros(10,dtype=int) array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) # 创建一个3行5列所有值为...[0] array([12, 5, 2, 4]) 非副本视图的子数组 关于数组切片有一点很重要也非常有用, 那就是数组切片返回的是数组数据的视图, 而不是数值数据的副本。...创建数组的副本 尽管数组视图有一些非常好的特性, 但是在有些时候明确地复制数组里的数据或子数组也是非常有用的。...另外一个常见的变形模式是将一个一维数组转变为二维的行或列的矩阵。
[1:7:2]) # output: # [1 2 3 4 5 6 7 8 9] # [2 4 6] ndarray数组可以通过整数数组进行索引,通常需要分别构造行索引和列索引的数组,通过行索引数组和列索引数组组合使用最终定位数组的索引...f_index:可以跟踪 Fortran 顺序的索引 multi-index:每次迭代可以跟踪一种索引类型 external_loop:给出的值是具有多个值的一维数组,而不是零维数组 5、广播迭代 如果两个数组是可广播的...(a, order='K') 创建给定数组a的一个副本,可以作为数组的方法使用。...一个 mxn的矩阵是一个由m行(row)和n列(column)元素排列成的矩形阵列,矩阵里的元素可以是数字、符号或数学式。...order参数,可选项为C(行序优先) 或者 F(列序优先)。 矩阵是二维的,而 ndarray 是一个 n 维数组。 矩阵与ndarray是可互换的。
将布尔数组作为掩码 七、花哨索引八、数组的排序 [ NumPy version: 1.18.1 ] import numpy as np 一、创建数组 # 1.从python列表创建数组 #...#第1行 x2[0] #第1行,空切片:可省略 # 4.非副本视图的子数组 #数组切片返回的是数组数据的视图,不是数值数据的副本(python列表中切片是值的副本)。...#处理大数据集时可以获取或处理这些数据集的片段而不用复制底层的数据缓存。 # 5.创建数组的副本 x2[:2, :2].copy() 4....ind = [3, 7, 4] x[ind] # 利用花哨索引使结果的形状与索引数组形状一致,而不是与被索引数组形状一致 ind = np.array([[3, 7], [4, 5]]) x[ind]...x[i] #结果等同np.sort(x) # 沿着多维数组的行或列排序(将行或列作为独立数组,行列值之间的关系将丢失) np.sort(X, axis=0) #对X的每一列排序 np.sort
m 行 n 列的a副本 [a b] np.concatenate((a,b),1)或np.hstack((a,b))或np.column_stack((a,b))或np.c_[a,b] 连接a和b的列...你可以拥有标准向量或行/列向量。 直到 Python 3.5 之前,使用数组类型的唯一劣势是你必须使用dot而不是*来对两个张量(标量积,矩阵向量乘法等)进行乘法运算。...此外,Python 通常被嵌入为脚本语言到其他软件中,在那里也可以使用 NumPy。 MATLAB 数组切片使用传值语义,具有延迟写入复制的机制,以防在需要之前创建副本。切片操作会复制数组的部分。...重塑和线性索引: MATLAB 始终允许使用标量或线性索引访问多维数组,而 NumPy 则不是。...这不是最佳的,因为将数组强制转换为 ndarrays 可能会导致性能问题或创建副本和元数据丢失,因为原始对象及其可能具有的任何属性/行为都会丢失。
# 来源:NumPy Essentials ch2 数组索引和切片 # 创建 100x100 个 0~1 随机数 x = np.random.random((100, 100)) # 取第 42...行 87 列的元素(从零开始) y = x[42, 87] # 取第 k 行的所有元素 # 等价于 x[k] 和 x[k, ...] print(x[k, :]) a = np.array([[...''' 计算第零列的和 ''' return np.sum(x[:, 0]) ''' 我们可以看到,C 风格数组按行访问比较快 F 风格数组按列访问比较快 %timeit...# 视图不共享 NumPy 对象,共享底层数据 # 副本不共享 NumPy 对象,不共享底层数据 x = np.random.rand(100,10) # 切片和索引都会产生视图 # 而不是副本...# zeros(size) 和 ones(size) 创建指定形状的全零或全一数组 # eye(n) 创建 n 维单位矩阵 # full(size, n) 创建指定形状的纯量数组,所有元素都为 n 数据类型
使用empty而不是zeros(或类似物)的原因是速度—只需确保稍后填充每个元素!...当第一个索引改变时,矩阵按列存储在内存中一列一列地变化。这就是为什么 Fortran 被认为是一种基于列的语言。而在 C 中,最后一个索引最快变化。矩阵按行存储,使之成为基于行的语言。...两者之间的主要区别是使用ravel()创建的新数组实际上是对父数组的引用(即“视图”)。这意味着对新数组的任何更改也会影响父数组。由于ravel不创建副本,它在内存上是高效的。...使用empty而不是zeros(或类似的东西)的原因是速度快 - 只需确保之后填充每个元素!...随着第一个索引的变化移动到下一行,矩阵按列存储。这就是为什么 Fortran 被认为是一种列主语言。另一方面,在 C 中,最后的索引变化最快。矩阵按行存储,使其成为一种行主语言。
同样,可以使用x[:,k]访问列。 反转数组也类似于反转列表,例如x[::-1]。 数组的索引部分也称为数组的切片,它创建端口或整个数组的副本(我们将在后面的部分中介绍副本和视图) 。...这意味着,当在数组中移动时,行索引将首先增加,然后列索引将增加。 在多维 C 样式数组的情况下,最后一个维度首先递增,然后是最后一个,但最后一个递增,依此类推。...通常,切片数组会创建一个视图,对其进行索引会创建一个副本。 让我们通过一些代码片段研究这些差异。 首先,让我们创建一个随机的100x10数组。...该代码段打印出五行零。 这是因为y只是一个视图,是对x的引用。 接下来,让我们创建一个副本以查看区别。...x按列广播,而y按行广播,因为它们的形状在形状上均等于1。 满足第二个广播条件,并且新结果数组是3x3。
相当于C语言的int,通常为int32或int64 ·intp ·用于索引的整数,相当于C语言中的size_t,通常为int32或int64...参数为嵌套序列,或者需要副本满足数据类型的顺序要求时,才会生成副本。...如果object参数不是数组,则新穿件的数组将按行数列,如果值为F,则按照列排列;如果object参数是一个数组,则以下顺序成立:C(按行)、F(按列)、A(原顺序)、K(元素在内存中的出现顺序)。...如果值为True,则传递子类,否则返回的数组将强制为基类数组(默认值) ·ndmin:指定生成数组的最小维数 ·创建随机数组 ·numpy.random.randint...:终止索引,若不写任何值,则表示直到末尾的全部索引 ·step:步长 ·创建图像 ·创建黑白图像
Pandas 给 NumPy 数组带来的两个关键特性是: 异质类型 —— 每一列都允许有自己的类型 索引 —— 提高指定列的查询速度 事实证明,这些功能足以使Pandas成为Excel和数据库的强大竞争者...默认情况下,当创建一个没有索引参数的Series(或DataFrame)时,它初始化为一个类似于Python的range()的惰性对象。...对于非数字标签来说,这有点显而易见:为什么(以及如何)Pandas在删除一行后,会重新标记所有后续的行?对于数字标签,答案就有点复杂了。...Pandas有df.insert方法,但它只能将列(而不是行)插入到数据框架中(而且对序列根本不起作用)。...例如: 要通过标签指定插入点,你可以把pdi.find和pdi.insert结合起来,如下图所示: 注意,与df.insert不同,pdi.insert返回一个副本,而不是在原地修改Series/DataFrame
由于动态类型的原因,在Python中用list实现这种操作并不是很有效。 Numpy数组是静态类型化和同质化的。元素类型是在创建数组时定义的(那么数组数据类型可以改变)。...# v是一个只有一个维度的向量,所以一个索引就足以获得元素。 v[0] ? # M是一个矩阵(二维数组),所以需要两个索引(行,列)。 M[1,1] ?...如果我们省略了多维数组中的索引,就会返回一些值(一般情况下,N-1维的数组)。 M ? M[1] ? M[1,:]#第一行 ? M[:,1]#第一列 ? 使用索引,你可以为单个数组元素赋值。...M[0,0] = 1 M 也适用于行和列 #也适用于行和列 M[1,:] = 0 M[:,2] = -1 M ?...#A没有改变,因为B是A的副本,不是同一个对象的引用。 A ? 10.增加一个新的度量newaxis v = array([1,2,3]) shape(v) ?
使用 2.1 ndarray ndarray 即 n 维数数组类型,它是一个相同数据类型的集合,以 0 下标为开始进行集合中元素的索引。...=0) p_object:数组或嵌套的数列 dtype:数组元素的数据类型 copy:是否需要复制 order:创建数组的样式,C 为行方向,F 为列方向,A 为任意方向(默认) subok:默认返回一个与基类类型一致的数组...NumPy 数组支持索引、切片操作,还可以进行迭代,先看一下一维数组。...print(arr[:, 0]) # 连续取多列 print(arr[:, 2:]) # 取不连续的多列 print(arr[:, [0, 2]]) 2.4 副本与视图 视图(浅复制)只是原有数据的一个引用...import numpy as np a = np.arange(1, 6) # 创建副本 b = a.copy() print(a is b) b[1] = 10 print(a[1]) print
如果 object 不是数组,则新创建的数组将按行排列(C),如果指定了(F),则按列排列。 如果 object 是一个数组,则以下成立。...属性 说明 ndarray.ndim 秩,即轴的数量或维度的数量 ndarray.shape 数组的维度,对于矩阵,n 行 m 列 ndarray.size 数组元素的总个数,相当于 .shape 中...1、ndarray.shape 返回一个包含数组维度的元组,对于矩阵,n 行 m 列,它也可以用于调整数组维度。...10 12 14 16 18] 2、numpy.linspace 创建一个一维等差数列的数组,与 arange 函数不同,arange 是固定步长,而 linspace 则是固定元素数量。...的内存中创建数组,从上例中可以看出,改变 array.array 的值,numpy.frombuffer 的值也会跟着改变,由此可见。
我们还可以创建一个由 16 位浮点数填充的数组。 该数组看起来类似于整数数组。 1 的末尾有一个圆点; 这有点表明包含的数据是浮点而不是整数。...返回了一个新对象,但是该对象不是数组的新副本; 它是数组内容的视图。 因此,如果我们希望创建一个独立的副本,则在切片时也需要使用copy方法,如我们之前所见。...尽管只有一列,但只有一列和一行,而不是只有一行和一列是没有意义的。.../img/280c0309-eb08-4c7f-a163-d90d2c923790.png)] 我还想创建一个仅包含鸢尾花副本最后一列的新数组,并创建另一个包含其余列和全为 1 的列的数组。...我们可以更改apply的axis参数,以便将其应用于行(即跨列),而不是应用于列(即跨行)。applymap具有与应用不同的目的。
例如,numpy.zeros和numpy.ones分别创建长度或形状为 0 或 1 的数组。numpy.empty创建一个数组,而不将其值初始化为任何特定值。...注意 如果您想要一个 ndarray 切片的副本而不是视图,您需要显式复制数组,例如arr[5:8].copy()。正如您将看到的,pandas 也是这样工作的。 对于更高维度的数组,您有更多的选择。...返回一个数组的排序副本(类似于 Python 内置函数sorted),而不是在原地修改数组。...NumPy 数组而不是 Python 列表。...,而不是副本。
领取专属 10元无门槛券
手把手带您无忧上云