zoukankan      html  css  js  c++  java
  • Numpy and Pandas

    安装

    视频链接:https://morvanzhou.github.io/tutorials/data-manipulation/np-pd/

    pip install numpy
    pip install pandas
    

    Numpy 学习

    Numpy属性

    import numpy as np
    
    array = np.array([[1,2,3],
    				  [2,3,4]])
    print(array)
    print('number of dim:',array.ndim)//几维度
    print('shape:',array.shape)//行数列数
    print('size:',array.size)//多少个元素
    

    Numpy创建array

    impport numpy as np
    
    a = np.array([2,23,4],dtype=np.int)
    print(a)
    print(a.dtype)
    a = np.zeros((3,4))//三行四列的0矩阵
    a = np.ones((3,4),dtype=np.int16)//三行四列的1矩阵
    a = np.empyt((3,4))//三行四列非常接近0的矩阵
    a = np.arrange(10,20,2)//[10 12 14 16 18]
    a = np.arrange(12).reshape((3,4))//三行四列从0~11
    a = np.linspace(1,10,5)//从1到10分成5段的数列,[1. 3.25 5.5 7.75 10.]
    

    Numpy 基础运算1

    import numpy as np
    
    a = np.array([10,20,30,40]
    b = np.arrange(4)
    print(b<3)//[True True True False]
    print(b == 3)//[False False False True]
    
    c = a + b
    print(c)//[10 21 32 43]
    
    c = b**2//b的平方,[0 1 4 9]
    c = 10*np.sin(a)//正弦
    
    d = np.array([[1,1],
    			  [0,1] ])
    e = np.arrange(4).reshape((2,2))
    f = d*e
    f_dot = np.dot(e,f)
    f_dot_2 = e.dot(f)//运算和f_dot完全相同
    print(f)//[[0 1][0 3]]
    print(f_dot)//[[2 4][2 3]],只是矩阵的运算
    
    a = np.random.random((2,4))//2行4列0~1范围的随机值
    np.sum(a)//求和
    np.min(a)//求最小
    np.max(a)//求最大
    
    np.sum(a,axis=1)//在行中求和,1代表行,0代表列
    

    Numpy 基础运算2

    import numpy as np
    
    A = np.arrange(2,14).reshape((3,4))
    np.argmin(A)//最小值的索引
    np.argmax(A)//最大值的索引
    print(np.argmin(A))//0
    np.mean(A)//平均值
    A.mean()//平均值
    np.median(A)//中位数 7.5
    np.cumsum(A)//逐步加进去 [2 5 9 14 20 27 35 44 54 65 77 90]
    np.diff(A)//每两个数之间的差 [[1 1 1][1 1 1][1 1 1]]
    np.nonzero(A)//找出非零元素的位置
    np.sort(A)//逐行排序
    np.transpose(A)//A的转置
    A.T//A的转置
    (A.T).dot(A)//A的转置与A相乘
    np.clip(A,5,9)//小于5的数赋值为5,大于9的数赋值为9,中间值不变
    np.mean(A,axis=0)//对列取平均值 [10. 9. 8. 7.]
    print(A)
    

    Numpy 索引

    import numpy as np
    
    A = np.arrange(3,15) 
    A[3]//6
    A = A.reshape((3,4))
    A[2]//[11 12 13 14]
    A[1][1]//8
    A[1,1]//8
    A[2,:]//第2行的所有数
    A[1,1:3]//[8 9]
    
    for row in A:
    	print(row)//依次打印每一行
    
    
    for column in A.T:
    	print(column)//依次打印每一列
    
    A.flatten()//又转成了一维 [3 4 5 6 7 8 9 10 11 12 13 14]
    
    for item in A.flat:
    	print(item)//3-14依次每行打印出来,A.flat返回了一个迭代器
    

    Numpy array 合并

    import numpy as np
    
    A = np.array([1,1,1])
    B = np.array([2,2,2])
    
    C = np.vstack((A,B))#[[1 1 1][2 2 2]] vertical stack上写合并
    D = np.hstack((A,B))#[1 1 1 2 2 2] horizontal stack左右合并
    print(A.shape,C.shape,D.shape)#(3,)(2,3)(6,)
    
    #把横向的数列转成纵向的 np.newaxis增加一个维度 还有reshape(3,1)
    A[np.newaxis,:].shape #(1,3)
    A[:,np.newaxis].shape #(3,1) [[1][1][1]]
    
    E = np.concatenate((A,B,B,A),axis=0)#指定方向合并(左右或者上下)
    

    Numpy array 分割

    import numpy as np
    
    A = np.arange(12).reshape((3,4))
    np.split(A,2,axis = 1)#横向等分成两段 [array([[0,1][4,5],[8,9]]),array([[2,3][6,7],[10,11]])] 横向等分成两段
    
    np.array_split(A,3,axis = 1)#横向不等分成两段 [array([[0,1],[4,5],[8,9]]),array([[2],[6],[10]]),array([[3],[7],[11]])]
    
    np.vsplit(A,3)#纵向分为三段
    np.hsplit(A,2)#横向分为两段
    

    Numpy copy & deep copy

    import numpy as np
    
    a = np.arange(4)
    b = a
    c = a
    d = b
    a[0] = 1
    b is a#True b就是a b[0] = 11  a,b,c,d就是一个变量 引用
    
    b = a.copy() # deep copy
    b is a # False a和b是两个变量,没有关联
    
    

    Pandas 学习

    Pandas 选择数据

    import pandas as pd
    import numpy as np
    
    dates = pd.date_range('20130101',periods = 6)
    df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,cloumns=['A','B','C','D'])
    
    print(df)
    
    
    	#				A	B	C	D
    	#	2013-01-01	0	1	2	3
    	#	2013-01-02	4	5	6	7
    	#	2013-01-03	8	9	10	11
    	#	2013-01-04	12	13	14	15
    	#	2013-01-05	16	17	18	19
    	#	2013-01-06	20	21	22	23
    	
    
    print(df.A)#或者 print(df['A'])
    
    
    	#	2013-01-01	0	
    	#	2013-01-02	4	
    	#	2013-01-03	8	
    	#	2013-01-04	12	
    	#	2013-01-05	16	
    	#	2013-01-06	20
    
    df[0:3],df['20130101':'201304']是同样的操作
    
    # select by label:loc  指定标签
    print(df.loc['20130102'])
    	#A	4
    	#B	5
    	#C	6
    	#D	7
    
    print(df.loc[:,['A','B']])#所有行的A列和B列显示出来
    print(df.loc[‘20130102’,['A','B']])#行索引为‘20130102’的A列和B列显示出来
    	#A	4
    	#B	5
    
    #select by position:iloc 指定位
    print(df.iloc[3])#打印第四行数据
    print(df.iloc[3,1])#打印第四行第二列数据
    
    print(df.iloc[1,3,5])#第2,4,6行打印
    
    #mixed selection:ix 混合位和标签
    print(df.ix[:3,['A','C']])#0-2行 A/C列
    
    #Boolean indexing 通过真值打印
    print(df[df.A > 8])# 打印A列中大于8的行的所有信息
    

    Pandas 设置值

    import pandas as pd
    import numpy as np
    
    dates = pd.date_range('20130101',periods = 6)
    df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,cloumns=['A','B','C','D'])
    
    df.iloc[2,2] = 111#修改第3行第3列数值
    df.iloc['20130101','B'] = 222
    df[df.A > 4] = 0# A列大于4的行的所有信息赋值为0
    df.A[df.A > 4] = 0# A列大于4的行的A列赋值为0
    df['F'] = np.nan #F列值全为NaN(没有此列就追加此列)
    df['E'] = pd.Series([1,2,3,4,5,6],index=pd.date_range('20130101',periods=6))#追加E列,列的值为1,2,3,4,5,6
    

    Pandas处理丢失数据

    import pandas as pd
    import numpy as np
    
    dates = pd.date_range('20130101',periods = 6)
    df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,cloumns=['A','B','C','D'])
    
    df.iloc[0,1] = np.nan
    df.iloc[1,2] = np.nan#设置第1行2列值为NaN
    
    print(df.dropna(axis=0,how='any'))#丢掉有NaN值的行
    #how={'any','all'} any表示只要有就满足 all表示所有都是才满足
    
    print(df.fillna(value=0))#填充NaN值为0
    df.isnull()#df中是否有NaN,列出所有
    np.any(df.isnull()) == True#只要有NaN就返回True
    
    

    Pandas 导入导出

    
    

    Pandas 合并 concat

    
    

    Pandas 合并 merge

    
    

    Pandas plot 画图

    
    
  • 相关阅读:
    关于在MAC上进行 LARAVEL 环境 Homestead 安装过程记录
    js 贷款计算器
    js 实现阶乘
    js 两点间距离函数
    composer Your requirements could not be resolved to an installable set of packages
    vue 项目优化记录 持续更新...
    vue 项目打包
    vue 真机调试页面出现空白
    vue 真机调试
    谈谈-Android状态栏的编辑
  • 原文地址:https://www.cnblogs.com/maskerk/p/9977696.html
Copyright © 2011-2022 走看看