1python自带数据结构:序列(如list)、映射(如字典)、集合(set)。
以下只介绍序列中的list:
创建list:
list1 = []
list1 = [1,2,3,4,5,6,7,8,9] #逗号隔开
list2 = [[1,2],[3,4],[5,6],[7,8]] #list2长度(len(list2))为2,list2[0] = [1,2]
liststring = list(“thisisalist”) #只用于创建字符串列表
索引list:
e = list1[0] #下标从零开始,用中括号
分片list:
es = list1[0:3]
es = list1[0:9:2] #步长在第二个冒号后
list拼接(list1append(obj)、加运算及乘运算):
list长度:
list每个元素乘一个数值:
list2 = numpydot(list2,2)
list类似矩阵相乘(每个元素对应相乘取和):
list3 = numpydot(list1,list1)
#要求相乘的两个list长度相同
list3 = numpydot(list2,list22)
#要求numpyshape(list2)和numpyshape(list22)满足“左行等于右列”的矩阵相乘条件,相乘结果numpyshape(list3)满足“左列右行”
2numpy数据结构:
Array:
产生array:
data=nparray([[1, 9, 6], [2, 8, 5], [3, 7, 4]])
data=nparray(list1)
data1 = npzeros(5) #data1shape = (5,),5列
data1 = npeye(5)
索引array:
datacut = data[0,2] #取第零行第二列,此处是6
切片array:
datacut = data[0:2,2] # array([6, 5])
array长度:
datashape
datasize
npshape(data)
npsize(data)
len(data)
array拼接:
#括号内也有一个括号(中括号或者小括号)!
d = npconcatenate((data,data))
d = npconcatenate((data,data),axis = 1) #对应行拼接
array加法:逐个相加
array乘法:
d = data data #逐个相乘
d = npdot(data,data) #矩阵相乘
d = data 3 #每个元素乘3
d = npdot(data,3) #每个元素乘3
array矩阵运算:
取逆 : nplinalginv(data)
转置:dataT
所有元素求和 : npsum(data)
生成随机数:nprandomnormal(loc=0, scale=10, size=None)
生成标准正态分布随机数组:nprandomnormal(size=(4,4))
生成二维随机数组:
nprandommultivariate_normal([0,0],npeye(2))
生成范围在0到1之间的随机矩阵(M,N):
nprandomrandint(0,2,(M,N))
Matrix:
创建matrix:
mat1 = npmat([[1, 2, 3], [4, 5, 6]])
mat1 = npmat(list)
mat1 = npmat(data)
matrix是二维的,所有+,-,都是矩阵 *** 作。
matrix索引和分列:
mat1[0:2,1]
matrix转置:
nptranspose(mat1)
mat1transpose()
matrix拼接:
npconcatenate([mat1,mat1])
npconcatenate([mat1,mat1],axis = 1)
numpy数据结构总结:对于numpy中的数据结构的 *** 作方法基本相同:
创建:npmat(list),nparray(list)
矩阵乘:npdot(x,y)
转置:xT or nptranspose(x)
拼接:npconcatenate([x,y],axis = 1)
索引:mat[0:1,4],ary[0:1,4]
3pandas数据结构:
Series:
创建series:
s = pdSeries([[1,2,3],[4,5,6]],index = [‘a’,‘b’])
索引series:
s1 = s[‘b’]
拼接series:
pdconcat([s1,s1],axis = 1) #也可使用sappend(s)
DataFrame:
创建DaraFrame:
df = pdDataFrame([[1,2,3],[1,2,3]],index = ['a','b'],columns = ['x','y','z'])
df取某一列:
dfc1 =dfx
dfc1 = df[‘x’]
dfc2 = dfiloc[:,0] #用iloc方括号里是数字而不是column名!
dfc2 = dfiloc[:,0:3]
df取某一行:
dfr1 = dfiloc[0]
df1 = dfiloc[0:2]
df1 = df[0:2] #这种方法只能用于取一个区间
df取某个值:
dfc2 = dfiloc[0,0]
dfc2 = dfiloc[0:2,0:3]
这个方法是在不改变数据内容的情况下,改变一个数组的格式,参数及返回值,官网介绍:
a:数组--需要处理的数据
newshape:新的格式--整数或整数数组,如(2,3)表示2行3列,新的形状应该与原来的形状兼容,即行数和列数相乘后等于a中元素的数量
order:
首先做出翻译: order : 可选范围为{‘C’, ‘F’, ‘A’}。使用索引顺序读取a的元素,并按照索引顺序将元素放到变换后的的数组中。如果不进行order参数的设置,默认参数为C。
(1)“C”指的是用类C写的读/索引顺序的元素,最后一个维度变化最快,第一个维度变化最慢。以二维数组为例,简单来讲就是横着读,横着写,优先读/写一行。
(2)“F”是指用FORTRAN类索引顺序读/写元素,最后一个维度变化最慢,第一个维度变化最快。竖着读,竖着写,优先读/写一列。注意,“C”和“F”选项不考虑底层数组的内存布局,只引用索引的顺序。
(3)“A”选项所生成的数组的效果与原数组a的数据存储方式有关,如果数据是按照FORTRAN存储的话,它的生成效果与”F“相同,否则与“C”相同。这里可能听起来有点模糊,下面会给出示例。
二、示例解释
1、首先随机生成一个4行3列的数组
2、使用reshape,这里有两种使用方法,可以使用npreshape(r,(-1,1),order='F'),也可以使用r1=rreshape((-1,1),order='F'),这里我选择使用第二种方法。通过示例可以观察不同的order参数效果。
通过例子可以看出来,F是优先对列信息进行 *** 作,而C是优先行信息 *** 作。如果未对r的格式进行设置,那么我们rashape的时候以“A”的顺序进行order的话,它的效果和“C”相同。
3、我们将r的存储方式进行修改,修改为类Fortan的方式进行存储。并做与第2步类似的 *** 作。
基础 *** 作样例:
1引入numpy,名称为np
2接下来创建一个数组a,可以看到这是一个一维的数组
3使用reshape()方法来更改数组的形状,可以看到看数组d成为了一个二维数组
4通过reshape生成的新数组和原始数组公用一个内存,也就是说,假如更改一个数组的元素,另一个数组也将发生改变
5同理还可以得到一个三维数组
reshape(-1,1)什么意思:
大意是说,数组新的shape属性应该要与原来的配套,如果等于-1的话,那么Numpy会根据剩下的维度计算出数组的另外一个shape属性值。
举例:
同理,只给定行数,newshape等于-1,Numpy也可以自动计算出新数组的列数。
NumPy的排序方法有直接排序和间接排序。直接排序是对数据直接进行排序,间接排序是指根据一个或多个键值对数据集进行排序。直接排序使用 sort()函数,间接排序使用 argsort函数和lexsort函数。
sort函数是常用的排序方法,函数调用改变原始数组,无返回值。
格式:numpysort(a, axis, kind, order)
参数:
a : 要排序的数组
axis: 使得sort函数可以沿着指定轴对数据集进行排序。axis=1 为沿横轴排序,axis=0为沿纵轴排序,axis=None将数组平坦化后进行排序。
kind: 排序算法,默认 quicksort
order: 如果数组包含字段,则是要排序的字段
a = nparray([7, 9, 5, 2, 9, 4, 3, 1, 4, 3])
print('原数组:', a)
asort()
print("排序后: ", a)
输出:
原数组: [7 9 5 2 9 4 3 1 4 3]
排序后: [1 2 3 3 4 4 5 7 9 9]
带参数轴的排序
a = nparray([[4, 2, 9, 5], [6, 4, 8, 3], [1, 6, 2, 4]])
print("原数组:", a)
asort(axis=1)
print("排序后: ", a)
输出:
原数组: [[4 2 9 5]
[6 4 8 3]
[1 6 2 4]]
排序后: [[2 4 5 9]
[3 4 6 8]
[1 2 4 6]]
使用argsort, lexsort函数,可以在给定一个或多个键时,得到一个由整数构成的索引数组,索引值表示数据在新序列中的位置。
a = nparray([7, 9, 5, 2, 8, 4, 3, 1, 4, 3])
print("原数组:", a)
print("排序后: ", aargsort())
# 返回数组下标排序
print('显示较大的5个数:', a[aargsort()][-5:])
输出:
原数组: [7 9 5 2 8 4 3 1 4 3]
排序后: [7 3 6 9 5 8 2 0 4 1]
显示较大的5个数: [4 5 7 8 9]
a = [1, 5, 7, 2, 3, -2, 4]
b = [9, 5, 2, 0, 6, 8, 7]
ind = nplexsort((b, a))
print('ind', ind)
tmp = [(a[i], b[i])for iin ind]
print('tmp', tmp)
输出:
ind [5 0 3 4 6 1 2]
tmp [(-2, 8), (1, 9), (2, 0), (3, 6), (4, 7), (5, 5), (7, 2)]
在统计分析中,需要提前将重复数据剔除。可以使用unique函数找到数组中唯一值并返回已排序的结果。参数return_counts设置为True时,可返回每个取值出现的次数。
数组内数据去重
names = nparray(['红色', '蓝色', '蓝色', '白色', '红色', '红色', '蓝色'])
print('原数组:', names)
print('去重后的数组:', npunique(names))
print('数据出现次数:', npunique(names, return_counts=True))
输出:
原数组: ['红色' '蓝色' '蓝色' '白色' '红色' '红色' '蓝色']
去重后的数组: ['白色' '红色' '蓝色']
数据出现次数: (array(['白色', '红色', '蓝色'], dtype='<U2'), array([1, 3, 3], dtype=int64))
统计分析时需要把一个数据重复若干次,在NumPy中主要使用tile, repeat函数实现重复数据
numpytile(A, reps)
a = nparange(5)
print('原数组:', a)
w = nptile(a, 3)
print("重复数据:", w)
输出:
原数组: [0 1 2 3 4]
重复数据: [0 1 2 3 4 0 1 2 3 4 0 1 2 3 4]
numpyrepeat(a, reps, axis=None)
参数:a 是需要重复的数组元素,reps是重复次数, axis只沿着那个轴进行,0 按进行元素重复, 1表按列元素进行重复
a = nparange(5)
print('原数组:', a)
w = nptile(a, 3)
print('重复数据处理:\n', w)
a2 = nparray([[1, 2, 3], [4, 5, 6]])
print('重复数据处理1:\n', a2repeat(2, axis=0))
print('重复数据处理2:\n', a2repeat(2, axis=1))
输出:
原数组: [0 1 2 3 4]
重复数据处理:
[0 1 2 3 4 0 1 2 3 4 0 1 2 3 4]
重复数据处理1:
[[1 2 3]
[1 2 3]
[4 5 6]
[4 5 6]]
重复数据处理2:
[[1 1 2 2 3 3]
[4 4 5 5 6 6]]
常见有sum, mean, std, var, min, max, 几乎所有的统计函数在针对2维数组时需要注意轴的概念。
axis参数0时,表示沿纵轴,1表示沿横轴
a = nparange(20)reshape(4, 5)
print('创建的数组:\n', a)
print('数组的和:', npsum(a))
print('数组纵轴的和: ', npsum(a, axis=0))
print('数组横轴的和: ', npsum(a, axis=1))
print('数组的均值: ', npmean(a))
print('数组纵轴的均值: ', npmean(a, axis=0))
print('数组横轴的均值 ', npmean(a, axis=1))
print('数组的标准差: ', npstd(a))
print('数组纵轴的标准差: ', npstd(a, axis=0))
print('数组横轴的标准差: ', npstd(a, axis=1))
输出:
创建的数组:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
数组的和: 190
数组纵轴的和: [30 34 38 42 46]
数组横轴的和: [10 35 60 85]
数组的均值: 95
数组纵轴的均值: [ 75 85 95 105 115]
数组横轴的均值 [ 2 7 12 17]
数组的标准差: 5766281297335398
数组纵轴的标准差: [559016994 559016994 559016994 559016994 559016994]
数组横轴的标准差: [141421356 141421356 141421356 141421356]
NumPy的基础主要包含数组及其索引,数组运算,数组读写以及常用的统计与分析方法。
以上就是关于python自带及pandas、numpy数据结构(一)全部的内容,包括:python自带及pandas、numpy数据结构(一)、python基础之numpy.reshape详解、NumPy 中的数据统计分析等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)