zoukankan      html  css  js  c++  java
  • numpy 模块和 pandas 模块

    一、numpy模块

    1.1 numpy 简介

    numpy是python的一种开源的数值计算扩展库,这种库可用来存储和处理大型numpy数组。

    numpy库有两个作用:

    ​ 1、区别于list列表,提供了数组操作、数组运算、以及统计分布和简单的数学模型

    ​ 2、计算速度快,甚至要优于python内置的简单运算,使得其成为pandas、sklearn等模块的依赖包。高级的框架如TensorFlow、PyTorch等,其数组操作也和numpy非常相似。

    1.2 创建numpy数组

    numpy数组即numpy的ndarray对象,创建numpy数组就是把一个列表传入np.array()方法

    import numpy as np 
    
    # 创建一维的ndarray对象
    arr =np.array([1,2,3])
    print(arr,type(arr))   # [1 2 3] <class 'numpy.ndarray'
    
    # 创建二维的ndarray对象
    print(np.array([[1,2,3],[4,5,6]]))  
    
    --------------------------------------------------------------------------------
    [[1 2 3]
     [4 5 6]]
    
    

    1.3 numpy数组的常用属性

    属性 解释
    T 数组的转置(对高维数组而言)
    dtype 数组元素的数据类型
    size 数组元素的个数
    ndim 数组的维数
    shape 数组的维度大小(以元组形式)
    astype 类型转换
    arr = np.array([[1,2,3],[4,5,6]])
    print(arr.T)  # 行与列互换
    --------------------------------------------------------------------------------
    [[1 4]
     [2 5]
     [3 6]]
    

    1.4 切片

    arr = np .array([[1,2,3],[4,5,6]])
    print(arr[:])  # 取出数组所有元素
    print(arr[:,:]) # 取出数组所有元素
    print(arr[0,:]) # 取出第0行到第一行的数组
    print(arr[0:1,:])  # 取出第0行到第一行的数组,顾头不顾尾
    print(arr[0:1,0:1])  # 取出第0行到第一行,第0列到第一列的数组,顾头不顾尾
    print(arr[0, 0],type(arr[0, 0]))   #取出第0行到第一行,第0列到第一列的数,输出数组类型
    print(arr[0, [0,2]])   #取出第0行第0个元素和第2个元素   [1 3]
    print(arr[0, 0] + 1)  #取出第0行第0列的元素加1  2
    

    1.5 取值

    arr = np.array([[1, 2, 3], [4, 5, 6]])
    arr[0, :] = 0    #将第0行的元素全部变为0
    print(arr)
    --------------------------------------------
    [[0 0 0]
     [4 5 6]]
    
    
    arr[1, 1] = 1  #将第一行第一列的数字改为1   
    print(arr)
    --------------------------------------------------------------------------------
    [[0 0 0]
     [4 1 6]]
    
    arr[arr < 3] = 3  # 布尔取值   将小于3的数字全部变为3
    print(arr)
    --------------------------------------------------------------------------------
    [[3 3 3]
     [4 3 6]]
    
    

    1.6 合并

    arr1 = np.array([[1, 2, 3], [4, 5, 6]])  # 可变数据类型
    arr2 = np.array([[7, 8, 9], [10, 11, 12]])  # 可变数据类型
    -------------------------------------------------------
    [[1 2 3]
     [4 5 6]]
    [[ 7  8  9]
     [10 11 12]]
    
    print(np.hstack((arr1,arr2)))  # 行合并
    ------------------------------------------------------------
    [[ 1  2  3  7  8  9]
     [ 4  5  6 10 11 12]]
    
    print(np.vstack((arr1,arr2)))  # 列合并
    ------------------------------------------------
    [[ 1  2  3]
     [ 4  5  6]
     [ 7  8  9]
     [10 11 12]]
    
    print(np.concatenate((arr1, arr2)))  # 默认列合并
    print(np.concatenate((arr1, arr2),axis=1))  # 1表示行;0表示列
    -----------------------------------------------------------
    [[ 1  2  3]
     [ 4  5  6]
     [ 7  8  9]
     [10 11 12]]
    [[ 1  2  3  7  8  9]
     [ 4  5  6 10 11 12]]
    

    1.7 通过函数创建numpy数组

    方法 详解
    array() 将列表转换为数组,可选择显式指定dtype
    arange() range的numpy版,支持浮点数
    linspace() 类似arange(),第三个参数为数组长度
    zeros() 根据指定形状和dtype创建全0数组 np.zeros((5, 5))
    ones() 根据指定形状和dtype创建全1数组 np.ones((5, 5))
    eye() 创建单位矩阵(对角线上的 数字为1)
    empty() 创建一个元素全随机的数组
    reshape() 重塑形状

    1.7 numpy数组运算

    运算符 说明
    + 两个numpy数组对应元素相加
    - 两个numpy数组对应元素相减
    * 两个numpy数组对应元素相乘
    / 两个numpy数组对应元素相除,如果都是整数则取商
    % 两个numpy数组对应元素相除后取余数
    **n 单个numpy数组每个元素都取n次方,如**2:每个元素都取平方

    1.9 额外了解

    numpy随机数

    print(np.random.rand(3,4))  #随机生成一个3*4的数组
    
    print(np.random.randint(1,10,(3,4))) # 最小值1,最大值10,3*4
    
    print(np.random.choice([1,2,3,4,5],3))   #随机生成一个元素为3个的数组,数组元素在[1,2,3,4,5]内
    

    重点

    随机数种子:所有的随机数是按照随机数种子生成的

    时间短则不变,时间长就变

    np.random.seed(int(time.time()))
    np.random.seed(1)   #如果固定了就不会变
    arr1 = np.random.rand(3,4)  # 可变数据类型
    print(arr1)
    rs = np.random.RandomState(1)  #产生一个随机状态种子,seed为1
    print(rs.rand(3,4))
    ---------------------------------------------------------
    [[4.17022005e-01 7.20324493e-01 1.14374817e-04 3.02332573e-01]
     [1.46755891e-01 9.23385948e-02 1.86260211e-01 3.45560727e-01]
     [3.96767474e-01 5.38816734e-01 4.19194514e-01 6.85219500e-01]]
    

    二、pandas模块

    1、导入方式

    import pandas as pd
    

    2、作用

    用于文件处理,更多地是给excel文件做处理,对numpy+xlrd模块做了一层封装

    3、pandas模块的数据类型

    3.1 series()

    现在一般不使用(一维)

    df = pd.series(np.array([1,2,3,4]))
    print(df)
    

    3.2 DataFrame() (多维)

    3.2.1

    dates = pd.date_range('20190101', periods=6, freq='M')
    print(dates)    # periods=6, freq='M'代表前六个月
    
    start 开始时间
    end 结束时间
    periods 时间长度
    freq 时间频率,默认为'D',可选H(our),W(eek),B(usiness),S(emi-)M(onth),(min)T(es), S(econd), A(year),…

    3.2.2 属性

    属性 详解
    dtype是 查看数据类型
    index 查看行序列或者索引
    columns 查看各列的标签
    values 查看数据框内的数据,也即不含表头索引的数据
    describe 查看数据每一列的极值,均值,中位数,只可用于数值型数据
    transpose 转置,也可用T来操作
    sort_index 排序,可按行或列index排序输出
    sort_values 按数据值来排序

    3.2.3 取值

    #构造一个数组
    dates = pd.date_range('20190101', periods=6, freq='M')
    print(dates)
    
    values = np.random.rand(6, 4) * 10
    print(values)
    
    columns = ['c4','c2','c3','c1']
    
    #主要掌握
    df.values[1,1]   #取出第一行第一列
    df.iloc[1,1] = 1  #取出第一行第一列,替换为1
    

    3.2.4 操作表格

    1、缺失值处理

    df = df.dropna(axis = 0)    #按行删除缺失值
    df
    df = df.dropna(tresh = 4)   #必须得有4个值,写5就不可以,因为只有4列
    df = df.dropna(axis=0)  # 1列,0行
    df  #按行取缺失值
    

    2、合并处理数据

    df1 = pd.DataFrame(np.zeros((2,3)))  #用0合并两行三列
    df2 = pd.DataFrame(np.ones((2,3)))  #用1合并两行三列
    pd.concat((df1,df2))  #默认按列合并
    pd.concat((df1,df2),axis=1)    axis=1是行,0是列
    df1.append(df2)   #往后追加
    
    • 导入数据,读取json文件菜鸟仅做了解
  • 相关阅读:
    回调函数案例(二)
    回调函数案例(一)
    liteos学习文档liteos.github.io
    HeapAlloc、GlobalAlloc和new等内存分配有什么区别么?
    C语言中字符数组和字符串指针分析
    socket 连接,使得地址马上可以重用
    shutdown 和closesocket
    IP地址转换成Long型数字的算法
    WSAStartup( )
    关于完成端口IOCP异步接收连接函数AcceptEx注意事项
  • 原文地址:https://www.cnblogs.com/zhuangyl23/p/11402719.html
Copyright © 2011-2022 走看看