TASK2__Numpy&Pandas的学习总结

Numpy

1、Numpy的属性
array是一个Numpy可以识别的矩阵
创建方式:

import numpy as np
>>> a = np.array([[1,2,3],[4,5,6]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])
若是访问a的属性
>>> a.ndim #访问a的维度
2
>>> a.shape #获取a的形状
(2, 3)
>>> a.size #获取矩阵a中的元素总数
6

2、Numpy创建array
1)用np.array()创建

import numpy as np
>>> a = np.array([[1,2,3],[4,5,6]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])
2)创建的时候有一个dtype
 a = np.array([[1,2,3],[4,5,6]],dtype = np.float32)
>>> a
array([[1., 2., 3.],
       [4., 5., 6.]], dtype=float32)
>>> a.dtype
dtype('float32')
3)特殊的生成方式
>>> b = np.zeros((3,2)) #生成形状为(3,2)的全部为0的矩阵
>>> b
array([[0., 0.],
       [0., 0.],
       [0., 0.]])
>>> c = np.ones((4,3)) #生成元素全部为1的形状为(4,3)的矩阵
>>> c
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])
>>> c.dtype
dtype('float64')      #这种方式创建的数组元素是float64的  

>>> d = np.arange(0,10,2)  #其中2是步长
>>> d
array([0, 2, 4, 6, 8])
>>> d.reshape((5,1))  #用reshape可以改变形状,但是元素个数应该满足条件
array([[0],
       [2],
       [4],
       [6],
       [8]])
>>> e = np.linspace(1,10,5)
>>> e
array([ 1.  ,  3.25,  5.5 ,  7.75, 10.  ])

3、numpy的基础运算
1)两个array 的加减乘除以及次方都是各个位置上的元素作相应的计算
2)

>>> a = 10*np.sin(np.arange(10))  #参数是一个array,把里面的每个元素都取正弦再乘以10
>>> a
array([ 0.        ,  8.41470985,  9.09297427,  1.41120008, -7.56802495,
       -9.58924275, -2.79415498,  6.56986599,  9.89358247,  4.12118485])
>>> print(a<0)  #在a中满足条件的对应位置输出True,否则为0
[False False False False  True  True  True False False False]

3)若是要进行数学中的矩阵相乘运算
np.dot(a,b)或者用a.dot(b)
4)用np.random.random((shape))可以生成指定形状的随机矩阵

>>> a = np.random.random((4,2))
>>> a
array([[0.09803711, 0.69012699],
       [0.93807771, 0.20197655],
       [0.53858079, 0.36067966],
       [0.56331237, 0.82411983]])

5)

>>> a = np.random.random((3,2))
>>> a
array([[0.73122454, 0.88231568],
       [0.82252921, 0.81762152],
       [0.86713797, 0.42036254]])
>>> a.sum()
4.541191466045384
>>> np.sum(a)
4.541191466045384
>>> a.max()
0.882315679709413
>>> np.max(a)
0.882315679709413

6)参数axis = 1的时候是横向操作,axis=0的时候是竖向操作
7)a.argmin/np.argmin(a) 求a最小值的索引

>>> a.argmin()
5

a.mean()或者np.mean(a)所有元素的求均值

>>> a.mean()
0.7568652443408973

np.median(a)求中位数
(重新创建了array)

>>> a = np.arange(12).reshape((3,4))
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
 >>> np.median(a)
		5.5

np.cumsum(a)累加

>>> np.cumsum(a)
array([ 0,  1,  3,  6, 10, 15, 21, 28, 36, 45, 55, 66], dtype=int32)
>>> a.cumsum()
array([ 0,  1,  3,  6, 10, 15, 21, 28, 36, 45, 55, 66], dtype=int32)

np.diff(a)累差

>>> np.diff(a)
array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]])

np.nonzore(a)输出不为0的位置

>>> np.nonzero(a)
(array([0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))

np.sort(a)逐行进行排序

np.transpose(a)或者a.T 进行转置

np.clip(a,5,9)所有小于5 的数让他等于5,所有大于9的让他等于9

4、Numpy的索引

    >>> A = np.arange(12).reshape((3,4))
    >>> A
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])

1)跟列表访问方式相同(两种方式均可)

>>> A[1][2]
6
>>> A[1,2]
6

2)切片操作

>>> A[:,1]
array([1, 5, 9])
>>> A[1,:]
array([4, 5, 6, 7])
>>> A[1,0:2]
array([4, 5])

3)迭代

>>> for row in A:
...     print(row)
...
[0 1 2 3]
[4 5 6 7]
[ 8  9 10 11]

默认是迭代行,若是迭代列,可以对矩阵进行转置
A.flat是产生一个迭代器,可以用for进行访问。若是要得到里面的元素组成的一维列表,可以用A.flatten()

>>> A.flatten()
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

5、numpy的合并

>>> a = np.arange(12).reshape((2,6))
>>> a
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11]])
>>> b = np.ones((2,6))
>>> b
array([[1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.]])

1)np.vstack((a,b))是把两个矩阵上下合并

>>> np.vstack((a,b))
array([[ 0.,  1.,  2.,  3.,  4.,  5.],
       [ 6.,  7.,  8.,  9., 10., 11.],
       [ 1.,  1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.,  1.]])

2)对于一个一维的序列

>>> c = np.arange(10)
>>> c
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

c.T并不能把它进行转置,要进行转置,可以进行下面的操作

>>> c[:,np.newaxis]
array([[0],
       [1],
       [2],
       [3],
       [4],
       [5],
       [6],
       [7],
       [8],
       [9]])
  >>> c.reshape((10,1))
array([[0],
       [1],
       [2],
       [3],
       [4],
       [5],
       [6],
       [7],
       [8],
       [9]])
>>> c
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> c.shape
(10,)

np.concatenate合并可以选择维度
axis=0:

>>> np.concatenate((a,b),axis=0)
array([[ 0.,  1.,  2.,  3.,  4.,  5.],
       [ 6.,  7.,  8.,  9., 10., 11.],
       [ 1.,  1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.,  1.]])
       
>>> np.concatenate((a,b),axis=1)
array([[ 0.,  1.,  2.,  3.,  4.,  5.,  1.,  1.,  1.,  1.,  1.,  1.],
       [ 6.,  7.,  8.,  9., 10., 11.,  1.,  1.,  1.,  1.,  1.,  1.]])

numpy的分割操作
1、

>>> A = np.arange(16).reshape(4,4)
>>> A
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

axis = 1

>>> np.split(A,2,axis=1)
[array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])]

axis = 0

>>> c,d=np.split(A,2,axis=0)
>>> c
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])
>>> d
array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])

np.array_split()

>>> np.array_split(A,3,axis=1)
[array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), array([[ 2],
       [ 6],
       [10],
       [14]]), array([[ 3],
       [ 7],
       [11],
       [15]])]

np.vsplit&np.hsplit

>>> np.vsplit(A,2)
[array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])]

copy和deepcopy
numpy中若用array A的值给arrayB赋值,那么他们本质上是指向同一个地址的,对其中一个进行改变,另一个的值同样变化,这个和python的List是一样的。

>>> A
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
>>> B=A
>>> B
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
>>> A[0][0]=11
>>> A
array([[11,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
>>> B
array([[11,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

用B=A.copy进行deepcopy

>>> A
array([[11,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
>>> B=A.copy()
>>> B
array([[11,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
>>> A[0][0]=0
>>> B
array([[11,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

Pandas

1、基本介绍
pandas更像一个字典,可以给每一行或者每一列进行命名。

pandas创建一个序列

>>> a = pd.Series([1,2,3,np.nan,32,11])
>>> a
0     1.0
1     2.0
2     3.0
3     NaN
4    32.0
5    11.0
dtype: float64

最左边的一列是index

生成一个日期索引序列:

>>> dates=pd.date_range('20190101',periods=6)
>>> dates
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
               '2019-01-05', '2019-01-06'],
              dtype='datetime64[ns]', freq='D')

生成一个DataFrame

>>> df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=['a','b','c','d'])
>>> df
                   a         b         c         d
2019-01-01 -0.757479 -1.275697  0.023078 -0.526511
2019-01-02 -0.701367  1.765137 -0.774334  0.748952
2019-01-03 -0.895433 -0.476380  0.696927 -0.361880
2019-01-04 -0.169814  0.662464 -0.853243  0.154464
2019-01-05  1.064632  1.353264 -1.202664  1.464638
2019-01-06  1.261063 -1.605963  1.271087 -0.220592
>>> df.index
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
               '2019-01-05', '2019-01-06'],
              dtype='datetime64[ns]', freq='D')
>>> df.columns
Index(['a', 'b', 'c', 'd'], dtype='object')
>>> df.values
array([[-0.75747905, -1.27569666,  0.02307821, -0.52651098],
       [-0.70136708,  1.76513736, -0.7743341 ,  0.74895185],
       [-0.89543309, -0.47638017,  0.69692699, -0.36188032],
       [-0.16981387,  0.66246374, -0.85324283,  0.15446419],
       [ 1.06463247,  1.35326435, -1.20266372,  1.46463843],
       [ 1.26106331, -1.60596311,  1.27108651, -0.22059187]])
>>> df.describe()
              a         b         c         d
count  6.000000  6.000000  6.000000  6.000000
mean  -0.033066  0.070471 -0.139858  0.209845
std    0.960572  1.399254  0.975557  0.764536
min   -0.895433 -1.605963 -1.202664 -0.526511
25%   -0.743451 -1.075868 -0.833516 -0.326558
50%   -0.435590  0.093042 -0.375628 -0.033064
75%    0.756021  1.180564  0.528465  0.600330
max    1.261063  1.765137  1.271087  1.464638

sort_values用法
DataFrame.sort_values(by=‘##’,axis=0,ascending=True, inplace=False, na_position=‘last’)
参数说明
by 指定列名(axis=0或‘index’)或者索引值(axis=1或‘columns’)
axis 若axis = 0或’index’,则按照指定的列种的数据大小排序;若axis=1或‘columns’,则按照指定索引中的数据大小排序,默认axis=0;
ascending 是否按指定的列的数组升序排列
inplace 是否用排序后的数据替换原来的数据
na_position {‘first’,‘last’},设定缺失值的显示位置
依据col1进行排序

>>> df = pd.DataFrame({'col1':['a','b','c','b'],'col2':[2,3,6,5],'col3':[4,5,6,8]})
>>> df
  col1  col2  col3
0    a     2     4
1    b     3     5
2    c     6     6
3    b     5     8
>>> df.sort_values(by='col1')
  col1  col2  col3
0    a     2     4
1    b     3     5
3    b     5     8
2    c     6     6

逆排序

>>> df.sort_values(by='col1',ascending=False)
  col1  col2  col3
2    c     6     6
1    b     3     5
3    b     5     8
0    a     2     4

sort_index排序

2、选择数据

>>> df
  col1  col2  col3
0    a     2     4
1    b     3     5
2    c     6     6
3    b     5     8

1)列表访问
直接df[1]会报错
df[1:2]访问第二行则不会
可以通过列进行索引

>>> df['col1']
0    a
1    b
2    c
3    b
Name: col1, dtype: object

2)标签筛选
用a.loc[]进行索引,[]里面是index 或者 columns,可以像array那样进行索引,也可以进行切片。(对列进行的时候,应该用[:,columns])

>>> df.loc[0,'col1']
'a'
>>> df.loc[0,'col1':'col2']
col1    a
col2    2
Name: 0, dtype: object

3)按位置筛选
用df.iloc[]

>>> df.iloc[0:2]
  col1  col2  col3
0    a     2     4
1    b     3     5

4)混合筛选(df.ix[])

>>> df.ix[0:2,'col1']
0    a
1    b
2    c
Name: col1, dtype: object
>>> df.ix[0:2]
  col1  col2  col3
0    a     2     4
1    b     3     5
2    c     6     6
>>> df.ix[[0,1],['col1','col2']]
  col1  col2
0    a     2
1    b     3

5)是或否的筛选

>>> df[df.col2>2]
  col1  col2  col3
1    b     3     5
2    c     6     6
3    b     5     8
#这个则仅仅打印出的col1那一列
>>> df.col1[df.col2>3]
2    c
3    b
Name: col1, dtype: object

3、设置值

>>> df
  col1  col2  col3
0    a     2     4
1    b     3     5
2    c     6     6
3    b     5     8

1)可以按照位置或者标签进行更改

>>> df.loc[0,'a']='e'
>>> df
  col1  col2  col3    a
0    a     2     4    e
1    b     3     5  NaN
2    c     6     6  NaN
3    b     5     8  NaN
>>> df.loc[0,'col1']='f'
>>> df
  col1  col2  col3    a
0    f     2     4    e
1    b     3     5  NaN
2    c     6     6  NaN
3    b     5     8  NaN

2)Df.dropna(axis = 0/1 ,how = ‘all/any’)

>>> df.dropna(axis=0,how='any')
  col1  col2  col3  a
0    f     2     4  e
>>> df.dropna(axis=1,how='any')
  col1  col2  col3
0    f     2     4
1    b     3     5
2    c     6     6
3    b     5     8

3)填充为NaN的值

>>> df.fillna(value=11)
  col1  col2  col3   a
0    f     2     4   e
1    b     3     5  11
2    c     6     6  11
3    b     5     8  11

4)判断是不是为NaN

>>> df.isnull()
    col1   col2   col3      a
0  False  False  False  False
1  False  False  False   True
2  False  False  False   True
3  False  False  False   True

判断哪些列缺失

>>> df.isnull().any()
col1    False
col2    False
col3    False
a        True
dtype: bool
>>> df[df.isnull().values==True]
  col1  col2  col3    a
1    b     3     5  NaN
2    c     6     6  NaN
3    b     5     8  NaN

4、pandas导入与导出
data = pd.read_csv(‘文件名’)
data.to_csv(‘文件名’)

5、合并 concat

>>> df1 = pd.DataFrame(np.zeros((3,4)),columns=['a','b','c','d'])
>>> df2 = pd.DataFrame(np.ones((3,4)),columns=['a','b','c','d'])
>>> df3 = pd.DataFrame(np.ones((3,4))*2,columns=['a','b','c','d'])
>>> df1
     a    b    c    d
0  0.0  0.0  0.0  0.0
1  0.0  0.0  0.0  0.0
2  0.0  0.0  0.0  0.0
>>> df2
     a    b    c    d
0  1.0  1.0  1.0  1.0
1  1.0  1.0  1.0  1.0
2  1.0  1.0  1.0  1.0
>>> df3
     a    b    c    d
0  2.0  2.0  2.0  2.0
1  2.0  2.0  2.0  2.0
2  2.0  2.0  2.0  2.0

concatenating

>>> res = pd.concat([df1,df2,df3],axis=0,ignore_index = True)
>>> res
     a    b    c    d
0  0.0  0.0  0.0  0.0
1  0.0  0.0  0.0  0.0
2  0.0  0.0  0.0  0.0
3  1.0  1.0  1.0  1.0
4  1.0  1.0  1.0  1.0
5  1.0  1.0  1.0  1.0
6  2.0  2.0  2.0  2.0
7  2.0  2.0  2.0  2.0
8  2.0  2.0  2.0  2.0

join,[‘inner’,‘outer’]

>>> df1
     a    b    c    d
0  0.0  0.0  0.0  0.0
1  0.0  0.0  0.0  0.0
2  0.0  0.0  0.0  0.0
>>> df2
     b    c    d    e
2  1.0  1.0  1.0  1.0
3  1.0  1.0  1.0  1.0
4  1.0  1.0  1.0  1.0

默认情况下join的值为’outer’

>>> res = pd.concat([df1,df2])
>>> res
     a    b    c    d    e
0  0.0  0.0  0.0  0.0  NaN
1  0.0  0.0  0.0  0.0  NaN
2  0.0  0.0  0.0  0.0  NaN
2  NaN  1.0  1.0  1.0  1.0
3  NaN  1.0  1.0  1.0  1.0
4  NaN  1.0  1.0  1.0  1.0

也可以设置为’inner’

>>> res = pd.concat([df1,df2],ignore_index = True,join = 'inner')
>>> res
     b    c    d
0  0.0  0.0  0.0
1  0.0  0.0  0.0
2  0.0  0.0  0.0
3  1.0  1.0  1.0
4  1.0  1.0  1.0
5  1.0  1.0  1.0

参数join_axes

>>> res = pd.concat([df1,df2],axis = 1,join_axes = [df1.index])
>>> res
     a    b    c    d    b    c    d    e
0  0.0  0.0  0.0  0.0  NaN  NaN  NaN  NaN
1  0.0  0.0  0.0  0.0  NaN  NaN  NaN  NaN
2  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0

append增加数据,默认axis = 0,也可以向DataFrame中添加Series

>>> res = df1.append(df2,ignore_index = True)
>>> res
     a    b    c    d    e
0  0.0  0.0  0.0  0.0  NaN
1  0.0  0.0  0.0  0.0  NaN
2  0.0  0.0  0.0  0.0  NaN
3  NaN  1.0  1.0  1.0  1.0
4  NaN  1.0  1.0  1.0  1.0
5  NaN  1.0  1.0  1.0  1.0

6、merge合并

>>> left = pd.DataFrame({'key':['K0','K1','K2','K3'],'A':['A0','A1','A2','A3'],'B':['B0','B1','B2','B3']})
>>> right = pd.DataFrame({'key':['K0','K1','K2','K3'],'C':['C0','C1','C2','C3'],'D':['D0','D1','D2','D3']})
>>> left
  key   A   B
0  K0  A0  B0
1  K1  A1  B1
2  K2  A2  B2
3  K3  A3  B3
>>> right
  key   C   D
0  K0  C0  D0
1  K1  C1  D1
2  K2  C2  D2
3  K3  C3  D3

用on基于’key’进行合并
用merge进行合并how默认是inner

>>> res = pd.merge(left,right,on = 'key')
>>> res
  key   A   B   C   D
0  K0  A0  B0  C0  D0
1  K1  A1  B1  C1  D1
2  K2  A2  B2  C2  D2
3  K3  A3  B3  C3  D3

也可以针对两个key进行合并
参数indicator 默认是False 可以改为True或者indicator_column
用left_index = True来进行按行合并

用suffixes加后缀

>>> boys = pd.DataFrame({'k':['K0','K1','K2'],'age':[1,2,3]})
>>> girls = pd.DataFrame({'k':['K0','K0','K3'],'age':[4,5,6]})
>>> res = pd.merge(boys,girls,on = 'k',suffixes = ['_boys','_girls'],how = 'inner')
>>> res
    k  age_boys  age_girls
0  K0         1          4
1  K0         1          5
>>> res = pd.merge(boys,girls,on = 'k',suffixes = ['_boys','_girls'],how = 'outer')
>>> res
    k  age_boys  age_girls
0  K0       1.0        4.0
1  K0       1.0        5.0
2  K1       2.0        NaN
3  K2       3.0        NaN
4  K3       NaN        6.0

7、pandas 画图
需要导入import matplotlib.pyplot as plt
需要先plot 然后再show

#Series

>>> data = pd.Series(np.random.randn(1000),index = np.arange(1000))
>>> data = data.cumsum()
>>> data.plot()
>>> plt.show()

在这里插入图片描述
plot methods:
‘bar’ ,‘hist’, ‘box’,‘area’,‘scatter’,‘hexbin’,‘pie’

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值