数据分析之Pandas和Numpy学习笔记(持续更新)<1>
pandas and numpy notebook
pandas和numpy学习系列,主要目的记录学习中的亮点,以及熟悉对jupyter的使用!
- import pandas as pd
- import numpy as np
- import matplotlib.pyplot as plt
- data = {"a":12, "b":55, "c":50}
- pd.Series(data)
- a 12
- b 55
- c 50
- dtype: int64
- data1 = {'a' : 10, 'b' : 20, 'c' : 30}
- pd.Series(data1, index=['b', 'c', 'a', 'd'])
- b 20.0
- c 30.0
- a 10.0
- d NaN
- dtype: float64
2. ndarray是numpy中定义的多维数组[矩阵模块]。ndarray对象可以作为pandas中Series的data数据源进行转换。
ndarray 的一个特点是同构:即其中所有元素的类型必须相同。
NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推。在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量。比如说,二维数组相当于是一个一维数组,而这个一维 数组中每个元素又是一个一维数组。所以这个一维数组就是NumPy中的轴(axes),而轴的数量——秩,就是数组的维数。
- data2 = np.random.randn(5)#一维随机数列表
- index = ['a', 'b', 'c', 'd', 'e'] # 指定索引
- pd.Series(data2, index)
- a 0.483059
- b 0.104168
- c 0.413886
- d -1.115421
- e 1.306849
- dtype: float64
2.1 介绍一下Numpy的ndarray对象
- temp = [[1, 9, 6],[2, 8, 5],[3, 7, 4]]
- x = np.array(temp)
- print(x.T)#获得x的转置矩阵
- print(x.size)#获得数组中元素的个数
- print(x.ndim) #获得数组的维数
- print(x.shape) #获得数组的(行数,列数))
- x.flags #返回数组内部的信息
- x.flat #将多维数组转化为1维数组 [1,9,6,2,8,5,3,7,4]
- # for i in x.flat:
- # print(i)
- # x.flat = 2;x#将值赋给1维数组,再转化成有原有数组的大小形式
- y=x.reshape(1,9)#数组转化为n行m列
- print(y)
- y.base#获得该数组基于另外一个对象数组而来,如下,y是根据x而来
- np.array(range(15)).reshape(3,5)
- [[1 2 3]
- [9 8 7]
- [6 5 4]]
- 9
- 2
- (3, 3)
- [[1 9 6 2 8 5 3 7 4]]
- array([[ 0, 1, 2, 3, 4],
- [ 5, 6, 7, 8, 9],
- [10, 11, 12, 13, 14]])
2.2 利用ndarray创建矩阵或者多维数组
- np.ndarray(shape=(2,3), dtype=int, buffer=np.array([1,2,3,4,5,6,7]), offset=0, order="C")
- #创建多维数组形状shape,
- #数据类型dtype,
- #初始化数组buffer
- #offset含义是 buffer中用于初始化数组的首个数据的偏移
- #order含义是 'C':行优先;'F':列优先
- #order参数的C和F是numpy中数组元素存储区域的两种排列格式,即C语言格式和Fortran语言格式。
- array([[1, 2, 3],
- [4, 5, 6]])
2.3 ones、zeros、empty系列函数
某些时候,我们在创建数组之前已经确定了数组的维度以及各维度的长度。这时我们就可以使用numpy内建的一些函数来创建ndarray。 例如:函数ones创建一个全1的数组、函数zeros创建一个全0的数组、函数empty创建一个内容随机的数组,在默认情况下,用这些函数创建的数组的类型都是float64,若需要指定数据类型,只需要闲置dtype参数即可
- #可以通过元组指定数组形状
- a = np.ones(shape=(2,3))
- print(a.dtype)
- #也可以通过列表来指定数组形状,同时这里指定了数组类型
- b = np.zeros(shape=[3,2], dtype=np.int64)
- b.dtype
- #函数empty创建一个内容随机的数组
- c = np.empty((4,2))
- c.dtype
- #其他用法
- f=[[1,2,3], [3,4,5]]
- np.zeros_like(f)
- np.ones_like(f)
- np.empty_like(f)
- float64
- array([[1, 2, 3],
- [3, 4, 5]])
2.4 arange、linspace与logspace
1> arange函数类似python中的range函数,通过指定初始值、终值以及步长(默认步长为1)来创建数组
2> linspace函数通过指定初始值、阀值以及元素个数来创建一维数组
3> logspace函数与linspace类似,只不过它创建的是一个等比数列,同样的也是一个一维数组
- np.arange(0, 10, 2)
- array([0, 2, 4, 6, 8])
- np.linspace(0,12, 4)
- array([ 0., 4., 8., 12.])
- np.logspace(0,2,3)
- array([ 1., 10., 100.])
2.5 fromstring、fromfunction系列函数
1> fromstring函数从字符串中读取数据并创建数组
2> fromfunction函数由第一个参数作为计算每个数组元素的函数(函数对象或者lambda表达式均可),第二个参数为数组的形状
- str1 = "1,2,3,4,5"
- np.fromstring(str1, dtype=np.int64, sep=",")
- array([1, 2, 3, 4, 5], dtype=int64)
- str2 = "1.01 2.23 3.53 4.76"
- np.fromstring(str2, dtype=np.float64, sep=" ")
- array([1.01, 2.23, 3.53, 4.76])
- def func(i, j):
- return (i+1)*(j+1)
- np.fromfunction(func, (2,3))#dtype=np.float64
- array([[1., 2., 3.],
- [2., 4., 6.]])
- np.fromfunction(lambda i,j: i+j, (3,3), dtype=int)
- array([[0, 1, 2],
- [1, 2, 3],
- [2, 3, 4]])
2.6 ndarray创建特殊的二维数组
np中matrix是继承于采用了ndarray建立的二维数组进行了封装的子类。特别注意,关于二维数组的创建,依旧是一个ndarray对象,而不是matrix对象。
- arr = np.arange(9).reshape((3,3))
- print(arr)
- [[0 1 2]
- [3 4 5]
- [6 7 8]]
diag函数返回一个矩阵的对角线元素、或者创建一个对角阵,对角线由参数k控制 [这里的k就是列的索引]
- np.diag(arr)#array([0, 4, 8])
- np.diag(arr, k=1)#array([1, 5])
- np.diag(arr, k=-1)#array([3, 7])
- np.diag(np.diag(arr))#array([[0, 0, 0], [0, 4, 0], [0, 0, 8]])
- np.diag(np.diag(arr), k=1)
- array([[0, 0, 0, 0],
- [0, 0, 4, 0],
- [0, 0, 0, 8],
- [0, 0, 0, 0]])
diagflat函数以输入作为对角线元素,创建一个矩阵,对角线有参数k控制
- np.diagflat([1,2,3], k=1)
- array([[0, 1, 0, 0],
- [0, 0, 2, 0],
- [0, 0, 0, 3],
- [0, 0, 0, 0]])
- np.diagflat([[1,2],[3,4]])
- array([[1, 0, 0, 0],
- [0, 2, 0, 0],
- [0, 0, 3, 0],
- [0, 0, 0, 4]])
tri函数生成一个矩阵,在某对角线以下元素全为1,其余全为0,对角线由参数k控制
- np.tri(3,4, k=1, dtype=int)
- array([[1, 1, 0, 0],
- [1, 1, 1, 0],
- [1, 1, 1, 1]])
tril函数输入一个矩阵,返回该矩阵的下三角矩阵,下三角的边界对角线由参数k控制
- print(arr)
- print("-----------")
- print(np.tril(arr, k=0))
- print("-----------")
- print(np.tril(arr, k=1))
- [[0 1 2]
- [3 4 5]
- [6 7 8]]
- -----------
- [[0 0 0]
- [3 4 0]
- [6 7 8]]
- -----------
- [[0 1 0]
- [3 4 5]
- [6 7 8]]
triu函数与tril类似,返回的是矩阵的上三角矩阵
- np.triu(arr, k=1)
- array([[0, 1, 2],
- [0, 0, 5],
- [0, 0, 0]])
vander函数输入一个一维数组,返回一个范德蒙矩阵
范德蒙行列式
- np.vander([2,3,4,5])
- array([[ 8, 4, 2, 1],
- [ 27, 9, 3, 1],
- [ 64, 16, 4, 1],
- [125, 25, 5, 1]])
- np.vander([2,3,4,5],N=2)
- array([[2, 1],
- [3, 1],
- [4, 1],
- [5, 1]])
2.7 ndarray元素访问
- 2.7.1 一维数组
- 一维的ndarray数组可以使用python内置list操作方式
- array[beg:end:step]
- beg: 开始索引
- end: 结束索引(不包含这个元素)
- step: 间隔
- 需要注意的是:
- beg可以为空,表示从索引0开始;
- end也可以为空,表示达到索引结束(包含最后一个元素);
- step为空,表示间隔为1;
- 负值索引:倒数第一个元素的索引为-1,向前以此减1
- 负值step:从后往前获取元素
- x1 = np.arange(16)*4#list每个元素*4,list规模不变
- x1[0:10:3]
- array([ 0, 12, 24, 36])
- x1[::-1]#倒置列表---pythonic
- array([60, 56, 52, 48, 44, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0])
- 特别注意的是,ndarray中的切片返回的数组中的元素是原数组元素的索引,对返回数组元素进行修改会影响原数组的值
- x1[:-1]
- array([ 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56])
- y = x1[::-1]
- y
- array([60, 56, 52, 48, 44, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0])
- y[0]=9999
- y
- array([9999, 56, 52, 48, 44, 40, 36, 32, 28, 24, 20,
- 16, 12, 8, 4, 0])
- x1
- array([ 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
- 44, 48, 52, 56, 9999])
- 仔细观察上边y和x1操作变化!!
- 除了上述与list相似的访问元素的方式,ndarray还可以通过索引列表来访问,例如:
- x1[[0,2,4,5]]##指定获取索引为0,2,4,5的元素
- array([ 0, 8, 16, 20])
- 2.7.2 多维数组
- 多维ndarray中,每一维都叫一个轴(axis)。
- 在ndarray中轴axis是非常重要的,有很多对于ndarray对象的运算都是基于axis进行,比如sum、mean等都会有一个axis参数(针对对这个轴axis进行某些运算操作)
- 对于多维数组,因为每一个轴都有一个索引,所以这些索引由逗号进行分割
- x2 = np.arange(0,100,5).reshape(4,5)
- x2
- array([[ 0, 5, 10, 15, 20],
- [25, 30, 35, 40, 45],
- [50, 55, 60, 65, 70],
- [75, 80, 85, 90, 95]])
- x2[1,2]#第1行,第2列
- 35
- x2[1:4, 3]#第1行到第4行中所有第3列的元素,实际是第1、2、3行
- array([40, 65, 90])
- x2[:, 4] #所有行中的所有第4列的元素
- array([20, 45, 70, 95])
- x2[0:3, :] #第0行到第三行中所有列的元素,实际是第0、1、2行
- array([[ 0, 5, 10, 15, 20],
- [25, 30, 35, 40, 45],
- [50, 55, 60, 65, 70]])
- 需要注意的是:
- 1> 当提供的索引比轴数少时,缺失的索引表示整个切片(只能缺失后边的轴)
- x2[1:3]
- #确实第二个轴,就是只有x轴,没有y轴。
- array([[25, 30, 35, 40, 45],
- [50, 55, 60, 65, 70]])
- 2> 当提供的索引为:时,也表示整个切片
- x2[:, 0:4]#:标识两个轴全部元素,列轴(y轴)范围是0-4
- array([[ 0, 5, 10, 15],
- [25, 30, 35, 40],
- [50, 55, 60, 65],
- [75, 80, 85, 90]])
- 3> 可以使用...代替几个连续的:索引
- x2[..., 0:4]
- array([[ 0, 5, 10, 15],
- [25, 30, 35, 40],
- [50, 55, 60, 65],
- [75, 80, 85, 90]])
一维和多维ndarray数组都可以支持迭代!只不过高维迭代需要使用flat做一个降维的操作!
- for itr in x2:
- print(itr)
- [ 0 5 10 15 20]
- [25 30 35 40 45]
- [50 55 60 65 70]
- [75 80 85 90 95]
- for itr in x2.flat:#将多维转化为一维(降维)
- print(itr)
3. ndarray对象方法
- 上边有提到ndarray数组是同构的,那么下边我们来看看ndarray对象有哪些方法。
- print(dir(np.ndarray))
- 忽略类属性(__***__),剩下的就是ndarray的类方法。即就是: 'all', 'any', 'argmax', 'argmin', 'argpartition', 'argsort', 'astype', 'base', 'byteswap', 'choose', 'clip', 'compress', 'conj', 'conjugate', 'copy', 'ctypes', 'cumprod', 'cumsum', 'data', 'diagonal', 'dot', 'dtype', 'dump', 'dumps', 'fill', 'flags', 'flat', 'flatten', 'getfield', 'imag', 'item', 'itemset', 'itemsize', 'max', 'mean', 'min', 'nbytes', 'ndim', 'newbyteorder', 'nonzero', 'partition', 'prod', 'ptp', 'put', 'ravel', 'real', 'repeat', 'reshape', 'resize', 'round', 'searchsorted', 'setfield', 'setflags', 'shape', 'size', 'sort', 'squeeze', 'std', 'strides', 'sum', 'swapaxes', 'take', 'tobytes', 'tofile', 'tolist', 'tostring', 'trace', 'transpose', 'var', 'view'
3.1 数据基本操作与转换 Array conversion
- 常用方法如下:
- ndarray.item(*args ) Copy an element of an array to a standard Python scalar and return it 复制数组中的一个元素,并返回
- ndarray.tolist( ) 将数组转换成python内置list类型
- ndarray.tostring([orader]) 创建ndarray数据类型为string
- ndarray.tobytes(([orader] )) 创建ndarray数据类型是byte
- ndarray.itemset(*args) 修改数组中某个元素的值
- ndarray.copy([order]) 复制数组 order : {‘C’, ‘F’}还有两个参数比较少见 同上 'C':行优先;'F':列优先
- ndarray.fill(value) Fill the array with a scalar value.使用值value填充数组
- cl = np.random.randint(12, size=(3,4))
- cl
- array([[ 7, 1, 0, 3],
- [ 6, 6, 5, 9],
- [ 1, 10, 10, 2]])
- ndarray.item(*args ) 复制数组中的一个元素,并返回。和直接取值是有区别的!!
- cl.item(8)
- 1
- cl.item((2,3))
- #根据元组(坐标)索引获取元素
- 2
- ndarray.tolist( ) 将数组转换成python内置list类型
- cl.tolist()
- [[7, 1, 0, 3], [6, 6, 5, 9], [1, 10, 10, 2]]
- ndarray.itemset(*args) 修改数组中某个元素的值
- cl.itemset(7, 9999) #修改第7个元素
- cl
- array([[ 7, 1, 0, 3],
- [ 6, 6, 5, 9999],
- [ 1, 10, 10, 2]])
- cl.itemset((1,1), 222) #修改索引为(1,1)对应的数据值
- cl
- array([[ 7, 1, 0, 3],
- [ 6, 222, 5, 9999],
- [ 1, 10, 10, 2]])
- ndarray.copy([order])
- cl_t = cl.copy()
- #这里注意一下:copy是深拷贝。
- #什么是深拷贝、浅拷贝?
- #简单讲就是:a,b是两个变量做复制操作,要是a与b共享相同物理空间,即就是同一个内存地址。叫做浅拷贝.
- #反之, 复制之后a,b是两个无关的变量,那么存储地址不相同,称之为深拷贝
- #怎么验证a与b是否指向同一物理地址呢?
- #修改a的值看b是否也变化了即可~
- cl_t
- array([[ 7, 1, 0, 3],
- [ 6, 222, 5, 9999],
- [ 1, 10, 10, 2]])
3.2 矩阵数列形状变换 Shape manipulation
- 1> ndarray.reshape(shape, order='C')
- #Returns an array containing the same data with a new shape. 数据不变,改变形状
- 2> ndarray.resize(new_shape, refcheck=True)
- #Change shape and size of array in-place. 修改数组的形状(需要保持元素个数前后相同)
- 3> ndarray.transpose(*axes)
- #Returns a view of the array with axes transposed. 返回数组针对某一轴进行转置的视图
- 4> ndarray.swapaxes(axis1, asix2) 返回数组axis1轴与axis2轴互换的视图
- 5> ndarray.flatten([order]) 返回将原数组压缩成一维数组的拷贝(全新的数组)
- 6> ndarray.ravel([order]) 返回将原数组压缩成一维数组的视图
- 7> ndarray.squeeze([axis]) 返回将原数组中的shape中axis==1的轴移除之后的视图
- sm = np.arange(0,12)
- sm
- array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
- 1> ndarray.reshape(shape[,order]) 数据不变,改变形状
- x_sm = sm.reshape((3,4))#在保证数据域不变情况下,直接修改原来数组结构
- sm.reshape((3,4)) #变形
- print(sm)#这里就可以看出来reshape直接修改原来数组结构
- x_sm[0,0] = 888 #修改值
- x_sm
- [[888 1 2]
- [ 3 4 5]
- [ 6 7 8]
- [ 9 10 11]]
- array([[888, 1, 2, 3],
- [ 4, 5, 6, 7],
- [ 8, 9, 10, 11]])
- 2> ndarray.resize(new_shape, refcheck=True) 原地修改数组的形状(需要保持元素个数前后相同)
- sm.resize((4,3)) #resize没有返回值,会直接修改数组的shape,如下所示
- sm
- array([[ 0, 1, 2],
- [ 3, 4, 5],
- [ 6, 7, 8],
- [ 9, 10, 11]])
- 3>ndarray.transpose(*axes) 返回数组针对某一轴进行转置的视图
- sm.transpose()
- array([[ 0, 3, 6, 9],
- [ 1, 4, 7, 10],
- [ 2, 5, 8, 11]])
- sm.resize(1,2,6)
- sm
- array([[[ 0, 1, 2, 3, 4, 5],
- [ 6, 7, 8, 9, 10, 11]]])
- ar = np.arange(12)
- ss = ar.reshape((4,3))
- 4> ndarray.swapaxes(axis1, asix2) 返回数组axis1轴与axis2轴互换的视图
- #这个点亲看后边3.2关于axis专门做的解释说明!
- sm.swapaxes(1,2)
- array([[[ 0, 6],
- [ 1, 7],
- [ 2, 8],
- [ 3, 9],
- [ 4, 10],
- [ 5, 11]]])
- 5> ndarray.flatten([order]) 返回将原数组压缩成一维数组的拷贝(返回全新的数组)---降维
- print(ss)
- y=ss.flatten()
- y
- [[ 0 1 2]
- [ 3 4 5]
- [ 6 7 8]
- [ 9 10 11]]
- array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
- ss#flatten不会修改原来的数组
- array([[ 0, 1, 2],
- [ 3, 4, 5],
- [ 6, 7, 8],
- [ 9, 10, 11]])
- 6> ndarray.ravel([order]) 返回将原数组压缩成一维数组的视图---返回原数组
- ss.ravel()
- array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
- 7> ndarray.squeeze([axis]) 返回将原数组中的shape中axis==1的轴移除之后的视图
- #这稍复杂,请看官网。
- ss.squeeze().shape#没有1
- (4, 3)
3.3 计算
- 这里我们先来理解一下ndarray总的“axis”
- 请看举例:
- np.random.seed(123)
- x = np.random.randint(0,5,[3,2,2])
- print(x)
- x.max(axis=0)
- [[[2 4]
- [2 1]]
- [[3 2]
- [3 1]]
- [[1 0]
- [1 1]]]
- array([[3, 4],
- [3, 1]])
- 分析:
- 首先数列模型是shape(3,2,2),由输出看出这个“3”就是x的三个部分,分别有换行区分明显区分出来。而axis取值0对应的就是3,
- 那么max(axis=0)代表在这三个部分求取最大值。按照位置一一分式比较就是max(2,3,1)=3,max(4,2,0)=4,max(2,3,1)=3,max(1,1,1)=1
- 进而得到如下结果
- 采用集合思想,shape(3,2,2)相当于是一个多维空间,axis=0意味着三个面的重叠;axis=1是3个面每个面中的列组成的集合;axis=2是3个面每个面行组成的集合
- 那么请看详细数据说明:
- x.max(axis=1)
- array([[2, 4],
- [3, 2],
- [1, 1]])
- x.max(axis=2)
- array([[4, 2],
- [3, 3],
- [1, 1]])
- 所以明白了axis的原理,那么计算就很简单了,只简单需要看一下方法就可以。
- ndarray.max([axis, out, keepdims]) 返回根据指定的axis计算最大值
- ndarray.argmax([axis, out]) 返回根据指定axis计算最大值的索引
- ndarray.min([axis, out, keepdims]) 返回根据指定的axis计算最小值
- ndarray.argmin([axis, out]) 返回根据指定axis计算最小值的索引
- ndarray.ptp([axis, out]) 返回根据指定axis计算最大值与最小值的差
- ndarray.clip([min, max, out]) 返回数组元素限制在[min, max]之间的新数组(小于min的转为min,大于max的转为max)
- ndarray.round([decimals, out]) 返回指定精度的数组(四舍五入)
- ndarray.trace([offset, axis1, axis2, dtype, out]) 返回数组的迹(对角线元素的和)
- ndarray.sum([axis, dtype, out, keepdims]) 根据指定axis计算数组的和,默认求所有元素的和
- ndarray.cumsum([axis, dtype, out]) 根据指定axis计算数组的累积和
- ndarray.mean([axis, dtype, out, keepdims]) 根据指定axis计算数组的平均值
- ndarray.var([axis, dtype, out, ddof, keepdims]) 根据指定的axis计算数组的方差
- ndarray.std([axis, dtype, out, ddof, keepdims]) 根据指定axis计算数组的标准差
- ndarray.prod([axis, dtype, out, keepdims]) 根据指定axis计算数组的积
- ndarray.cumprod([axis, dtype, out]) 根据指定axis计算数据的累计积
- ndarray.all([axis, dtype, out]) 根据指定axis判断所有元素是否全部为真
- ndarray.any([axis, out, keepdims]) 根据指定axis判断是否有元素为真
3.4 选择元素以及操作
- ndarray.take(indices[, axis, out, model]) 从原数组中根据指定的索引获取对应元素,并构成一个新的数组返回
- ndarray.put(indices, values[, mode]) 将数组中indices指定的位置设置为values中对应的元素值
- ndarray.repeat(repeats[, axis]) 根据指定的axis重复数组中的元素
- ndarray.sort([axis, kind, order]) 原地对数组元素进行排序
- ndarray.argsort([axis, kind, order]) 返回对数组进行升序排序之后的索引
- ndarray.partition(kth[, axis, kind, order]) 将数组重新排列,所有小于kth的值在kth的左侧,所有大于或等于kth的值在kth的右侧
- ndarray.argpartition(kth[, axis, kind, order]) 对数组执行partition之后的元素索引
- ndarray.searchsorted(v[, side, sorter]) 若将v插入到当前有序的数组中,返回插入的位置索引
- ndarray.nonzero() 返回数组中非零元素的索引
- ndarray.diagonal([offset, axis1, axis2]) 返回指定的对角线
- aa = np.arange(0,100,5).reshape(4,5)
- aa.flatten()
- array([ 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80,
- 85, 90, 95])
- aa.take([0,2,3,4])
- array([ 0, 10, 15, 20])
- aa.take([[2,3],[4,7]])
- array([[10, 15],
- [20, 35]])
- aa.put([0,-1],[3,252])#j设置索引为0的值为3,最后一位为252
- aa
- array([[ 3, 5, 10, 15, 20],
- [ 25, 30, 35, 40, 45],
- [ 50, 55, 60, 65, 70],
- [ 75, 80, 85, 90, 252]])
- bb = aa.flatten()
- bb[10]=9999
- bb.sort()
- bb
- array([ 3, 5, 10, 15, 20, 25, 30, 35, 40, 45, 55,
- 60, 65, 70, 75, 80, 85, 90, 252, 9999])
- bb.argsort()#获取排序后的元素索引
- array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19], dtype=int64)
- bb[bb.argsort()]#获取上述索引对应的值
- array([ 3, 5, 10, 15, 20, 25, 30, 35, 40, 45, 55,
- 60, 65, 70, 75, 80, 85, 90, 252, 9999])
- bb[2]=8888
- print(bb[10])
- bb.partition(10)#小于70在左侧,大于在右侧
- bb
- 70
- array([ 55, 3, 5, 25, 30, 35, 45, 40, 65, 70, 75,
- 80, 90, 85, 252, 8888, 8888, 8888, 8888, 9999])
- 其余的可以自己尝试~
-
数据分析之Pandas和Numpy学习笔记(持续更新)<1>的更多相关文章
- [读书]10g/11g编程艺术深入体现结构学习笔记(持续更新...)
持续更新...) 第8章 1.在过程性循环中提交更新容易产生ora-01555:snapshot too old错误.P257 (这种情况我觉得应该是在高并发的情况下才会产生) 假设的一个场景是系统一 ...
- R语言的学习笔记 (持续更新.....)
1. DATE 处理 1.1 日期格式一个是as.Date(XXX) 和strptime(XXX),前者为Date格式,后者为POSIXlt格式 1.2 用法:as.Date(XXX,"%Y ...
- Semantic ui 学习笔记 持续更新
这个semantic 更新版本好快~ 首先是代码的标识<code></code> 具体样式就是红框这样的 圈起来代码感觉不错 不过要在semantic.css里在加上如下样式~ ...
- Git学习笔记(持续更新)
1.强制同步为远程的代码 远程仓库回退了commit的情况下(第2条描述之情况),强制同步远程的代码到本地 #更新远程最新的所有代码,但是不merge或者rebase git fetch --all ...
- ggplot2 学习笔记 (持续更新.....)
1. 目前有四种主题 theme_gray(), theme_bw() , theme_minimal(),theme_classic() 2. X轴设置刻度 scale_x_continuous(l ...
- # MongoDB学习笔记(持续更新)
启动mongo服务 sodo mongo 显示数据库(显示数据库名称和大小,单位GB) > show dbs admin (empty) local 0.078GB test 0.078GB t ...
- angularjs1学习笔记--持续更新
angularJS使用的MVC为何不属于二十三种设计模式之一? MVC被GoF (Gang of Four,四人组, <Design Patterns: Elements of Reusable ...
- GOF 的23种JAVA常用设计模式 学习笔记 持续更新中。。。。
前言: 设计模式,前人总结下留给后人更好的设计程序,为我们的程序代码提供一种思想与认知,如何去更好的写出优雅的代码,23种设计模式,是时候需要掌握它了. 1.工厂模式 大白话:比如你需要一辆汽车,你无 ...
- Python数据分析:Numpy学习笔记
Numpy学习笔记 ndarray多维数组 创建 import numpy as np np.array([1,2,3,4]) np.array([1,2,3,4,],[5,6,7,8]) np.ze ...
随机推荐
- python入门学习笔记(三)
10.函数 求绝对值的函数 abs(x) 也可以在交互式命令行通过 help(abs) 查看abs函数的帮助信息.调用 abs 函数:>>> abs(100)100>>& ...
- C#实现七牛云存储
云存储,就是把本地的资源文件存放至网络上,可以公网访问.相当于网盘功能,感觉非常方便. 这里介绍的是七牛云存储.有兴趣的可以去官方网站详看 根据官网的介绍,本身是提供SDK的,下载地址,大家可以根据自 ...
- Java经典编程题50道之三十二
取一个整数a从右端开始的4-7位. public class Example32 { public static void main(String[] args) { cut(12 ...
- 如何让div水平居中呢?
一百度div居中,多数都是一个答案,但是有时候这种方法并不是万能的...不废话,将我知道的方法都列举一下好了,随时更新. 1.设置width值,指定margin-left和margin-right为a ...
- mvc get image 500
mvc中get图片时报500错误 很奇怪,突然变500错误了,一番查找之后发现原来是因为mimeType重复定义的原因,吐血.. http://stackoverflow.com/questions/ ...
- ASP.NET Core 使用 URL Rewrite 中间件实现 HTTP 重定向到 HTTPS
在传统 ASP.NET 程序中,我们可以通过配置 IIS 的“URL 重写”功能实现将 HTTP 请求重定向为 HTTPS .但是该方法在 ASP.NET Core 应用中不再工作.在 ASP.NET ...
- nyoj61 传纸条(一) dp
思路:两人一个从左上角出发只能向右和向下,另一人从右下角出发只能向左和向上,可以看做两人都是从右下角出发,且只能向左和向上传纸条,并且两条路径不会相交,因为一个人只会传一次,那么随便画一个图就能知道两 ...
- HDU - 1175 bfs
思路:d[x][y][z]表示以z方向走到(x, y)的转弯次数. 如果用优先队列会超时,因为加入队列的节点太多,无用的节点不能及时出队,会造成MLE,用单调队列即可. AC代码 #include & ...
- JavaScript设计模式之策略模式
所谓"条条道路通罗马",在现实中,为达到某种目的往往不是只有一种方法.比如挣钱养家:可以做点小生意,可以打分工,甚至还可以是偷.抢.赌等等各种手段.在程序语言设计中,也会遇到这种类 ...
- HashMap并发导致死循环 CurrentHashMap
为何出现死循环简要说明 HashMap闭环的详细原因 cocurrentHashMap的底层机制 为何出现死循环简要说明 HashMap是非线程安全的,在并发场景中如果不保持足够的同步,就有可能在执行 ...