• 【数学建模学习笔记【集训十天】之第八天】



    Pandas 学习(续)

    Pandas的axis参数

    # -*- coding = utf-8 -*-
    # @Time : 2022/7/5 09:22
    # @Author : lxw_pro
    # @File : Pandas 参数axis-10.py
    # @Software : PyCharm
    
    # Pandas的axis参数
    '''
    axis=0或index:
    如果是单行操作,指的是某一行
    如果是聚合操作,指的是跨行cross rows
    
    axis=1或columns:
    如果是单行操作,指的是某一列
    如果是聚合操作,指的是跨列cross columns
    
    【也就是哪个axis变,哪个axis就动,其余的保持不动】
    
    
    '''
    
    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame(
        np.arange(12).reshape(4, 3),
        columns=['A', 'B', 'C']
    )
    
    print(df)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    运行结果如下:

    请添加图片描述


    删除某列

    # 1-单列drop, 就是删除某一列
    print(df.drop("A", axis=1))     # 代表删除A列
    
    • 1
    • 2

    运行结果如下:

    请添加图片描述


    删除某行

    # 2-单列drop,就是删除某一行
    print(df.drop(1, axis=0))       # 代表删除1行
    
    • 1
    • 2

    运行结果如下:

    请添加图片描述


    聚合操作-index

    # 3-按axis=0或index执行mean聚合操作
    print(df.mean(axis=0))
    
    • 1
    • 2

    运行结果如下:

    请添加图片描述


    聚合操作-columns

    # 4-按axis=1或columns执行mean聚合操作
    print(df.mean(axis=1))
    
    • 1
    • 2

    运行结果如下:

    请添加图片描述


    所有行和

    def get_sum_val(x):
        return x['A']+x['B']+x['C']
    
    
    df["sum_val"] = df.apply(get_sum_val, axis=1)
    
    print(df)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    运行结果如下:

    请添加图片描述


    Pandas 索引index

    # Pandas 索引index
    '''
    index的用途总结:
    更方便的数据查询
    使用index可获得性能提升
    自动的数据对齐功能
    更多更强大的数据结构支持
    
    '''
    
    import pandas as pd
    
    lxw = pd.read_csv('nba.csv')
    
    print(lxw.head())
    
    print(lxw.count())
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    运行结果如下:

    请添加图片描述
    请添加图片描述


    查询数据-index

    # 使用index查询数据
    lxw.set_index("Name", inplace=True, drop=False)
    print(lxw.index)
    
    • 1
    • 2
    • 3

    运行结果如下:

    请添加图片描述


    查询数据-columns

    # 使用columns的condition查询方法
    print(lxw.loc[lxw['Weight'] == 220.0].head())
    
    • 1
    • 2

    运行结果如下:

    请添加图片描述


    提升查询功能

    # 2-使用index会提升查询功能
    '''
    如果index是唯一的,Pandas会使用哈希表优化,查询性能为O(1)
    如果index不是唯一的,但是有序,Pandas会使用二分查找算法,查询性能为O(logN)
    如果index完全是随机的,那么每次查询都要扫描全表,查询性能为O(N)
    
    '''
    
    # 完全随机的顺序查询
    
    # 将数据随机打散
    from sklearn.utils import shuffle
    
    df_shuffle = shuffle(lxw)
    
    print(df_shuffle.head())
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    运行结果如下:

    请添加图片描述


    # 索引是否是递增的
    print(df_shuffle.index.is_monotonic_increasing)	# 输出 False
    
    • 1
    • 2

    index 排序查询

    # 将index排序后的查询
    df_sorted = df_shuffle.sort_index()
    
    print(df_sorted.head())
    
    • 1
    • 2
    • 3
    • 4

    运行结果如下:

    请添加图片描述


    # 索引是否为递增
    print(df_sorted.index.is_monotonic_increasing)	# 输出 False
    
    print(df_sorted.index.is_unique)	# 输出 False
    
    • 1
    • 2
    • 3
    • 4

    index 对齐数据

    s1

    # 使用index能自动对齐数据【包括Series、DataFrame】
    s1 = pd.Series([1, 2, 3], index=list('abc'))
    print(s1)
    
    • 1
    • 2
    • 3

    运行结果如下:

    请添加图片描述


    s2

    s2 = pd.Series([2, 3, 4], index=list('bcd'))
    print(s2)
    
    • 1
    • 2

    运行结果如下:

    请添加图片描述


    s1和s1相加

    print(s1+s2)
    
    • 1

    运行结果如下:

    请添加图片描述


    # 使用index更多更强大的数据结构支持
    '''
    很多强大的索引数据结构:
    Categoricallndex    基于分类数据的index,提高性能
    Multilndex          多维索引,用于groupby多维聚合后结果等
    Datatimelndex       时间类型索引,强大的日期和时间的方法支持
    
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8


    SciPy 学习(续)

    SciPy 插值

    一维插值:

    # SciPy 插值
    '''
    在数学的数值分析领域中,插值是一种通过已知的、离散的数据点,在范围内推求新数据点的过程或方法
    
    SciPy 提供了 scipy.interpolate 模块来处理插值
    
    '''
    
    # 一维插值
    # 一维数据的插值运算可以通过方法 interp1d() 完成
    from scipy.interpolate import interp1d
    import numpy as np
    
    xw = np.arange(10)
    yw = 2*xw+1
    
    lxw = interp1d(xw, yw)
    
    newarr = lxw(np.arange(2.0, 2.9, 0.2))
    print(newarr)   # 输出 [5.  5.4 5.8 6.2 6.6]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    单变量插值:

    # 单变量插值
    # 单变量插值使用 UnivariateSpline() 函数,该函数接受 xs 和 ys 并生成一个可调用函数,该函数可以用新的 xs 调用
    from scipy.interpolate import UnivariateSpline
    import numpy as np
    
    xd = np.arange(10)
    yd = xd**2+np.cos(xd)-1
    
    lxw2 = UnivariateSpline(xd, yd)
    newarr2 = lxw2(np.arange(2.0, 2.9, 0.2))
    print(newarr2)  # 输出 [2.41685864 3.21741879 4.11840978 5.11812233 6.21484715]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    径向基函数插值:

    # 径向基函数插值
    # 径向基函数是对应于固定参考点定义的函数
    from scipy.interpolate import Rbf
    
    xj = np.arange(10)
    yj = xj**2+np.cos(xj)-1
    
    lxw3 = Rbf(xj, yj)
    newarr3 = lxw3(np.arange(2.0, 2.9, 0.2))
    
    print(newarr3)      # 输出 [2.58385316 3.22849074 3.99463461 4.88135567 5.88656925]
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13


    Maplotlib 学习(续)

    Matplotlib 饼图

    # Matplotlib 饼图
    # 饼图是圆形图,将其分成多个切片以说明数值比例
    from matplotlib import pyplot as plt
    
    bc = ['Python', 'Java', 'C', 'MySQL']
    cj = [91, 78, 82, 87]
    
    colors = ['blue', 'gold', 'yellowgreen', 'red']
    
    plt.pie(cj, labels=bc, colors=colors, autopct='%1.1f%%', shadow=True, startangle=90)
    plt.axis('equal')
    
    plt.show()
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    运行效果如下:

    请添加图片描述


    Matplotlib 轴标签和标题

    # Matplotlib 轴标签和标题
    # 使用 xlabel() 和 ylabel() 方法来设置 x 轴和 y 轴的标签
    # 可以使用 title() 方法来设置标题
    
    import matplotlib.pyplot as plt
    import numpy as np
    
    sz1 = np.array([2, 5, 8, 9])
    sz2 = np.array([6, 5, 2, 1])
    plt.plot(sz1, sz2)
    
    plt.title("lxw's sz")
    
    plt.xlabel("sz1")
    plt.ylabel("sz2")
    
    plt.show()
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    运行效果如下:

    请添加图片描述


    Matplotlib 网格线

    # Matplotlib 网格线
    # 可使用 pyplot 中的 grid() 方法来设置图表中的网格线。
    '''
    grid() 方法语法格式如下:
    
    matplotlib.pyplot.grid(b=None, which='major', axis='both', )
    参数说明:
    
    b:可选,默认为 None,可以设置布尔值,true 为显示网格线,false 为不显示,如果设置 **kwargs 参数,则值为 true。
    which:可选,可选值有 'major'、'minor' 和 'both',默认为 'major',表示应用更改的网格线。
    axis:可选,设置显示哪个方向的网格线,可以是取 'both'(默认),'x' 或 'y',分别表示两个方向,x 轴方向或 y 轴方向。
    **kwargs:可选,设置网格样式,可以是 color='r', linestyle='-' 和 linewidth=2,分别表示网格线的颜色,样式和宽度。
    
    '''
    
    # 添加一个简单的网格线
    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.array([1, 4, 7, 9])
    y = np.array([2, 9, 3, 8])
    
    plt.title("lxw's grid")
    plt.xlabel('x')
    plt.ylabel('y')
    
    plt.plot(x, y)
    plt.grid()
    
    plt.show()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    运行效果如下:

    请添加图片描述


    显示网格线【y轴方向】

    # 设置在y轴方向显示网格线
    plt.plot(x, y)
    plt.grid(axis='x')
    
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5

    运行效果如下:

    请添加图片描述


    网格线并加样式

    # 添加一个简单的网格线,并设置网格线的样式
    import matplotlib.pyplot as plt
    import numpy as np
    
    a = np.array([2, 9, 4, 8])
    b = np.array([3, 1, 9, 6])
    
    plt.title("lxw's grid text")
    plt.xlabel('a')
    plt.ylabel('b')
    
    plt.plot(a, b)
    plt.grid(color='b', linestyle='--', linewidth=0.6)
    
    plt.show()
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    运行效果如下:

    请添加图片描述


    上一章链接:【数学建模学习笔记【集训十天】之第七天】

    每日一言:

    所有的真理都要经过三个阶段:首先,受到嘲笑;然后,遭到激烈反对;最后,被理所当然地接受。

    持续更新中…

    在这里插入图片描述

  • 相关阅读:
    SuperMap iServer 快速发布其它平台GIS服务
    栈和队列及其多种接口实现-c语言
    docker安装es分词插件ik详情步骤
    【Java基础知识 23】缓冲区数据结构bytebuffer
    docker network网络模式
    千兆以太网(四)——UDP协议
    一次Kafka内存泄露排查经过
    贪吃蛇游戏
    Autowired注入的变量都是单例吗?
    《Linux C/C++服务器开发实践》之第4章 TCP服务器编程
  • 原文地址:https://blog.csdn.net/m0_66318554/article/details/125587514