python自带及pandas、numpy数据结构(一)

python自带及pandas、numpy数据结构(一),第1张

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 中的数据统计分析等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9748656.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存