资料-Python数据分析库

1,Numpy

中文网站:https://www.numpy.cn

本文只介绍numpy中的常用方法,更丰富的内容可以在中文网站中查找

        Numpy是使用Python进行科学计算的基础软件包,他可以对N维数组进行处理(矩阵)。

(1)numpy属性

numpy.array

numpy.ndim

numpy.shape

numpy.size

numpy.dtype

import numpy as np  #引入numpy库,并把它重命名为np
array=np.array([10,20,30]
               [40,50,60]
               [70,80,90])  #利用numpy的array方法创建多维数组,并创建array对象
print (array)  #运行结果为  [[10 20 30]
               #            [40 50 60]
               #            [70 80 90]]
print(array.ndim)   #输出array多维数组的维度  输出结果为2(中括号包含一个中括号
                    #,内外层一共两个中括号,所以为2维)
print(array.shape)  #输出array多维数组的形状  输出结果为(3,3)
print(array.size)   #输出array多维数组的大小,即总共有多少元素  输出结果为9
print(array.dtype)  #输出array多维数组的元素类型 输出结果为int32

(2)创建array

numpy.array()

numpy.zeros

numpy.ones

numpy.arange(i,j,k)

numpy.reshape(i,j)

import numpy as np
a=np.array([11,12,13],dtype=np.int32)   #第一个参数是数据,第二个参数指明数据类型
print(a)        #输出结果为[11 12 13]
print(a.dtype)  #输出结果为int32
b=np.array([21,22,23],dtype=float)      #也可以指明为浮点类型
c=np.array([31,32,33])  #一维数据
d=np.array([[10,20,30]
            [40,50,60]) #二维数据
zero=np.zeros((3,3))   #生成3行3列元素全为0的矩阵
                       #输出结果为[[0. 0. 0.]
                       #          [0. 0. 0.]
                       #          [0. 0. 0.]]
one=np.ones((3,4))  #生成3行4列元素全为1的矩阵
e=np.arange(12)     #生成从0到11的一维数组
                    #输出结果[0 1 2 3 4 5 6 7 8 9 10 11]
f=np.arange(4,12)   #生成从4到11的一维数组
                    #输出结果[4 5 6 7 8 9 10 11]
g=np.arange(1,12,3) #生成从1到11,步长为3的整型数列 
                    #输出结果[1 4 7 10]
h=np.arange(12).reshape(4,3) #用reshape方法重新定义矩阵形状,[4,3]为3行4列
                             #[[0 1 2]
                             # [3 4 5]
                             # [6 7 8]
                             # [9 10 11]

(3)numpy的运算1

arr1+arr2

arr1-arr2

arr1*arr2

arr1/arr2

arr1+i

arr1*i

arr1>i

np.dot(arr1,arr2)  或者 arr1.dot(arr2)

arr1.T

numpy.transpose(arr1)

import numpy as np
arr1=np.array([[1,2,3]
               [4,5,6]])
arr2=np.array([[7,8,9]
               [3,5,6]])
print(arr1+arr2)  #各元素相加
                  #输出结果[[8 10 12]
                  #        [7 10 12]]
print(arr1-arr2)
print(arr1*arr2)
print(arr1**arrr2) #输出结果[[1 256 19683]
                   #        [64 3125 46656]]
print(arr1/arr2)   #输出结果[[0.14285714 0.25 0.33333333]
                            [1.33333333 1.   1.        ]]
print(arr1+2)  #每个元素都加2
print(arr1*10) #每个元素都乘10
arr3=arr1>3  #对arr1中的元素进行判断,大于3的元素输出True,否则为Flase
print(arr3)  #输出结果[[Flase False False]
             #        [True  True  True ]]
arr4=np.ones((3,5))
np.dot(arr1,arr4)  #dot方法实现两个矩阵相乘,矩阵乘法规则参考线性代数
arr1.dot(arr4)  #效果和上述矩阵乘法相同
print(arr1.T)  #矩阵转置
print(np.transpose(arr1))  #矩阵转置,与上述效果相同

(4)随机数生成以及矩阵的运算2

numpy.random.randint(i,j,size=(k,a))

numpy.sum(sample1,axis=i)

numpy.min(sample1)

numpy.max(sample1)

numpy.argmin(sample1)

numpy.argmax(sample1)

numpy.median(sample1)

numpy.mean(sample1) 或sample1.mean()

numpy.sqrt(sample1)

numpy.sort(sample1)

numpy.clip(sample1,i,j)

import numpy as np
sample1=np.random.randint(0,10,size=(4,3))  #生成4行3列从0到10的随机整数
                                            #输出的一种可能结果
                                            #[[7 7 9]
                                              [4 4 3]
                                              [8 9 4]
                                              [8 3 0]]
sample2=np.random.randint(0,10,size=(4,3))
np.sum(sample1)  #求数组里所有元素的和 输出结果为66
np.min(sample1)  #输出数组中元素的最小值 输出结果为0
np.max(sample1)  #输出数组中元素的最大值 输出结果为9
np.sum(sample1,axis=0) #对数组中各列求和 输出结果为array([27,23,16})
np.sum(sample1,axis=1) #对数组中各行求和 输出结果为array([23,11,21,11])
np.argmin(sample1) #求数组中元素最小值的索引 输出结果为11
np.argmax(sample1) #求数组中元素最大值的索引 输出结果为2
np.median(sample1) #求数组元素中所有元素的中位数
np.mean(sample1) #求sample1所有元素的平均值 输出结果为7.33333333
sample1.mean()   #上述求平均值的另一种写法
np.sqrt(sample1) #对数组中每个元素开方
np.sort(sample1) #对每一行元素从大到小进行排序,输出结果
                 #[[7 7 9]
                 # [3 4 4]
                 # [4 8 9]
                 # [0 4 8]]
np.clip(sample1,3,6) #数组中的元素小于3就变成3,大于6就变成6,输出结果
                     #[[6 6 6]
                     # [3 4 4]
                     # [6 6 4]
                     # [6 3 3]]

(5)numpy的索引

各种索引

迭代行,迭代列,迭代每个元素(.flat方法)

import numpy as np
arr1=np.arange(2,17)
print(arr1[3])      #输出索引值为3的数,即5
print(arr1[2:5])    #输出索引值为2的数到索引值为4的数,即[4 5 6]
                    #切片索引时,:前的数输出,:后的数不输出,即从2到4
print(arr1[3:-1])   #输出索引值为3的数到索引值为-2的数(-1是从后往前为第一个数)
                    #[5 6 7 8 9 10 11 12 13 14 15]
print(arr1[:6])     #输出前6个数据,即[2 3 4 5 6 7]
print(arr1[-2:])       #输出最后两个数据,即[15 16]
arr2=arr1.reshape(3,5)
print(arr2)         #输出结果为[[2 3 4 5 6]
                    #          [7 8 9 10 11]
                    #          [12 13 14 15 16]]
print(arr2[1])      #输出第2行,输出结果为[7 8 9 10 11]
print(arr2[1][1])   #输出第二行第二列的数,即8
print(arr2[1,1])    #输出第二行第二列,跟上一个效果一样
print(arr2[:,2])    #输出每一行下标为2的元素,[4 9 14]
for i in arr2:
    print(i)        #迭代每一行
                    #输出结果[2 3 4 5 6]
                    #       [7 8 9 10 11]
                    #       [12 13 14 15 16]
for i in arr2.T:
    print(i)        #迭代每一列
for i in arr2.flat:
    print(i)        #迭代每一个元素,flat方法可以把多维展开成一维

(6)array合并(对数组的合并操作)

numpy.vstack((arr1,arr2,arr3,......))

numpy.hstack((arr1,arr2,arr3,......))

numpy.concatenate((arr1,arrr2,arr3......),axis=k)

numpy.newaxis

numpy.atleast_2d(arr1)

import numpy as np
arr1=np.array([1,2,3])
arr2=np.array([4,5,6]) 
arr3=np.vstack((arr1,arr2))  #垂直合并
print(arr3)          #输出结果为[[1 2 3]
                     #           [4 5 6]]
arr4=np.hstack((arr1,arr2))  #水平合并 
print(arr4)          #输出结果为[1 2 3 4 5 6]
arrv=np.vstack((arr1,arr2,arr3))  #也可以把多个数组进行合并
arr=np.concatenate((arr1,arr2,arr1))  #连接array组成一个新的array
                                      #输出结果为[1 2 3 4 5 6 1 2 3]
arr=np.concatenate((arr3,arrv),axis=0)#合并的array维度要相同
                                      #,形状要匹配,axis=0表示纵向合并
arr=np.concatenate((arr3,arr3),axis=1)#axis=0表示横向合并
arr1=arr1[np.newaxis,:]  #增加一个维度
print(arr1)                        #输出结果为 [[1 2 3]]
arr1=arr1[:,np.newaxis]  #每个元素都增加一个维度
print(arr1)              #输出结果为[[1]
                         #          [2]
                         #          [3]]
arr1=np.array([1,2,3])
arr1_2=np.atleast_2d(arr1) #将输入的数组转化为至少二维
print(arr1_2)              #输出结果为[[1 2 3]]

(7)array分割(数组分割)

numpy.split(arr1,k,axis=j)

numpy.array_split(arr1,k,axis=j)

numpy.hsplit(arr1,k)

numpy.vspilt(arr1,k)

import numpy as np
arr1=np.arange(12).reshape((3,4))
print(arr1)        #输出结果[[0 1 2 3]
                   #        [4 5 6 7]
                   #        [8 9 10 11]]
arr2,arr3=np.split(arr1,2,axis=1)  #将arr1水平方向分割,分成两份
#也可以使用numpy.hsplit(arr1,2)来实现
print(arr2)        #输出结果[[0 1]
                   #        [4 5]
                   #        [8 9]]
print(arr3)        #输出结果[[2 3]
                   #        [6 7]
                   #        [10 11]]
arr4,arr5,arr6=np.split(arr1,3,axis=0) #将arr1垂直方向分割,分成三份
#也可以使用numpy.vsplit(arr1,3)来实现
print(arr4)        #输出结果[[0 1 2 3]]
#如果将arr1水平分割为3份会报错,split方法用于均分
#要不均等分割就要使用numpy.array_split()方法
arr7,arr8,arr9=np.array_split(arr1,3,axis=1)#水平方向分割,分成3份,不等分割
print(arr7)        #输出结果[[0 1]
                   #        [4 5]
                   #        [8 9]]
print(arr8)        #输出结果[[ 2]
                   #        [ 6]
                   #        [ 10]]      
print(arr9)        #输出结果[[ 3]
                   #        [ 7]
                   #        [ 11]]

(8)numpy的浅拷贝和深拷贝

numpy.copy

import numpy as np
arr1=np.array([10 20 30])
arr2=arr1    #arr1和arr2共享一块内存,arr2的元素变化arr1中的元素也相应变化
             #浅拷贝
arr2=arr1.copy() #arr2和arr1不再共享,arr1就是arr1,arr2就是arr2
                 #深拷贝

2,Pandas

中文网站:https://www.pypandas.cn

本文只介绍pandas中的常用方法,更丰富的内容可以在中文网站中查找

Pandas是一个强大的分析结构化数据的工具集,它是基于numpy开发的

Pandas的两大利器为Series和DataFrame:                                                                                   Series是一种类似于一维数组的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。 Series的字符串表现形式为:索引在左边,值在右边。由于没有为数据指定索引,于是会自动创建一个0到N-1(N为数据的长度)的整数型索引。                                  DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。跟其他类似的数据结构相比(如R的data.frame),DataFrame中面向行和面向列的操作基本上是平衡的。其实,DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。 虽然DataFrame是以二维结构保存数据的,但你仍然可以轻松地将其表示为更高维度的数据(层次化索引的表格型结构,这是pandas中许多高级数据处理功能的关键要素)     

这里看不懂可以根据下述事例进行理解                                                                             

(1)pandas基础,Series,DataFrame

1.Series

import pandas as pd
import numpy as np
s1=pd.Series([5,-7,3,2])
print(s1)
#输出结果为
#0   5
#1   -7
#2   3
#3   2
#可以看到用Series创建的对象系统可以自动给它指定索引值并且可以输出
#每个索引值对应着一个值,且是有序的
#这种特征就类似于字典的键值对对应关系,但是字典内的元素是无序的,而Series的
#元素是有序的,当然Series创建的索引值可以是任意类型,如下代码
s2 = pd.Series([5.5,6.0,-1.8,4.4],index=['a','b','c','d'])
print(s2)
#输出结果
#a    5.5
#b    6.0
#c   -1.8
#d    4.4
#dtype: float64

可以使用pandas.value和pandas.index来输出所创建的Series的值和索引,我们以所创建的s1为例

s1.values#series的值
#输出结果
#array([ 5, -7,  3,  2], dtype=int64)
s1.index#series的索引
#输出结果
#RangeIndex(start=0, stop=4, step=1)

下面讲解通过索引值查找值

s2['a']#根据索引取值
#输出结果:5.5
s2[['a','b','c']]#根据索引取值
#输出结果
#a    5.5
#b    6.0
#c   -1.8
#dtype: float64

此外,也可以判断某个索引是否在所创建的Series中

'b' in s2
#输出结果:True
'e' in s2
#输出结果:Flase

由此可以看出,Series可以看作是一个定长且有序的字典,我们也可以把字典直接赋给Series

dic1 = {'fish':8,'dog':7,'cat':12}
s3 = pd.Series(dic1)
print(s3)
#输出结果
#fish     8
#dog      7
#cat     12
#dtype: int64

2.DataFreme

如下所示,DataFrame就是根据所给的数据生成一个表格,它包含行索引(name,income,pay)和列索引(这里由于没有给定,系统会用0 1 2 3 4的正常顺序代替)

再举一个例子,下方为用numpy.arrange()方法再通过reshape函数生成3行5列的dataframe数据,行索引和列索引缺少则系统自动填上。

可以自己指定行索引和列索引,如下

df3 = pd.DataFrame(np.arange(15).reshape((3,5)),index=['a','c','b'],columns=[1,3,4,2,5])
print(df3)

输出结果为

可以通过方法来输出列索引,行索引和值,如下以df1为例

下面介绍一个函数,descibe()函数,它可以返回数据结构的统计变量。如下

 count:数量统计,此列共有多少有效值; mean:均值; std:标准差; min:最小值; 25%:四分之一分位数; 50%:二分之一分位数; 75%:四分之三分位数; max:最大值。

dataframe的转置。将字典的键值赋值给dataframe时,将键作为行索引,转置后将键作为列索引

下面介绍 关于dataframe列排序和行排序

利用pandas.sort_index(axis=i)函数,并通过改变axis的值来确定是行排序还是列排序

排序就是根据大小比较来改变顺序

按指定值排序,下方是按2索引值排序,即以索引值为2的那一列中的数大小进行排序

(2)pandas选择数据

dates = pd.date_range('20210101',periods=6)#data_range按顺序生成日期型
print(dates)
#输出结果
#DatetimeIndex(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04',
#               '2021-01-05', '2021-01-06'],
#              dtype='datetime64[ns]', freq='D')
df1 = pd.DataFrame(np.arange(10,34).reshape((6,4)),index=dates,columns= 
       ['A1','A2','A3','A4'])
print(df1)

输出结果:

下面通过索引获取数据(这是获取行索引或列索引中的值,区分df1.index   df1.columns):

(1)通过输入列的索引来获取列数据

(2)通过切片的方法来获取行数据

(3)通过.loc方法(标签获取数据)

(4)通过.iloc方法(位置选取数据)

(7)通过>和<的关系判断获取

df1[df1.A1>6]是指将元素都大于6的行数据打印出来,这里由于所有数据都大于6,看不出差别,所以我们改一下数

未完待续。。。。。。。。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值