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 画图

    
    
  • 相关阅读:
    android细节之禁用activity的系统的默认切换效果
    Spark1.0.0 属性配置
    Memory & MyISAM 引擎小注意! | OurMySQL
    memcached vs MySQL Memory engine table 速度比较_XMPP Jabber即时通讯开发实践_百度空间
    Mysql 官方Memcached 插件初步试用感受
    Aerospike | Aerospike Chinese
    MySQL内存表的特性与使用介绍 -- 简明现代魔法
    memory引擎的索引失效一例
    MySQL内存表(MEMORY)说明 | 一个PHP程序员的备忘录
    MySQL Memory 存储引擎浅析
  • 原文地址:https://www.cnblogs.com/maskerk/p/9977696.html
Copyright © 2011-2022 走看看