python—pandas库(补充上文matplotlib库中部分作图内容)

文章目录

matplotlib补充内容

柱状图—bar()

直方图—hist()

饼图—pie()

折线图—plot()

散点图—scatter()

图片读取***—imread()

pandas库(篇1)

引入库

内置数据结构

Series

创建series对象

1、创建series空对象

2、通过列表创建series对象

3、通过ndarray创建series对象

4、通过字典创建series对象

 5、通过标量创建series对象

访问series数据

series常用属性

series常用方法

head() 和 tail()

isnull() 和 notnull()

DataFrame

Dataframe和Series的关系:

创建DataFrame对象

1、创建DataFrame空对象

2、通过列表创建DataFrame对象

3、通过列表嵌套列表(二维数组)创建DataFrame对象

4、通过列表嵌套字典创建DataFrame对象

5、通过字典嵌套列表创建DataFrame对象

6、通过series对象创建DataFrame对象

列索引操作

获取数据

添加数据

修改数据

删除数据

总结


matplotlib补充内容

柱状图—bar()

语法格式如下:

ax.bar(x,height, width=0.8, bottom=None, align='center', **kwargs)

参数说明

  • x: 柱状图的 X 轴位置。 —数据格式:列表

  • height: 柱状图的高度。 —数据格式:列表

  • width: 柱状图的宽度,默认为 0.8。

  • bottom: 柱状图的底部位置,默认为 0。即柱状图在y轴上记数的起始位置

  • align: 柱状图的对齐方式,可以是 'center'(居中对齐)或 'edge'(边缘对齐)。

  • **kwargs: 其他可选参数,用于定制柱状图的外观,如 color、edgecolor、linewidth 等。

  • def plt_bar():
        x = [1,2,3,4,5,6]
        y = [100,50,200,350,240,190]
    
        fig, axs = plt.subplots()
    
        # bar():柱状图
        # 参数:
        # x:x轴的数据,格式是列表
        # height:y轴的数据,格式是列表
        # width:柱子的高度,范围在0~1
        # bottom:柱状图的底部位置,默认为 0。
        # align:柱子的对齐方式,center、edge
        axs.bar(x,y,bottom=100)
    
        plt.show()
    
    
    # 柱状图的堆叠
    def plt_bar_v2():
        x = [1,2,3,4,5,6]
        y1 = [30,40,25,60,18,45]
        y2 = [10,15,9,21,23,10]
    
        # 柱状图的堆叠,通过设置bottom
        plt.bar(x,y1,color='lightgreen')
        plt.bar(x,y2,bottom=y1,color ='skyblue')
    
        plt.show()
    
    
    # 多个柱状图
    def plt_bar_v3():
        # 数据
        categories = ['A', 'B', 'C', 'D']
        values1 = [20, 35, 30, 25]
        values2 = [15, 25, 20, 10]
    
        # 创建图形和子图
        fig, ax = plt.subplots()
    
        # 计算柱状图的位置
        x = np.arange(len(categories))
        width = 0.35
    
        # 绘制第一个数据集的柱状图
        ax.bar(x - width / 2, values1, width, color='skyblue', label='Values 1')
    
        # 绘制第二个数据集的柱状图
        ax.bar(x + width / 2, values2, width, color='lightgreen', label='Values 2')
    
        plt.show()

    直方图—hist()

    语法格式如下:

    ax.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, **kwargs)

     参数说明

  • x: 数据数组。

  • bins: 直方图的柱数,可以是整数或序列。

  • range: 直方图的范围,格式为 (min, max)。

  • density: 是否将直方图归一化,默认为 False。

  • weights: 每个数据点的权重。

  • cumulative: 是否绘制累积直方图,默认为 False。

  • **kwargs: 其他可选参数,用于定制直方图的外观,如 color、edgecolor、linewidth 等。

  • # 生成随机数据,生成均值为 0,标准差为 1 的标准正态分布的随机样本
    data = np.random.randn(1000)
    
    fig, axs = plt.subplots()
    
    axs.hist(data, bins=60)
    
    plt.show()
    

     

    饼图—pie()

    语法格式如下:

    ax.pie(x, explode=None, labels=None, colors=None, autopct=None, shadow=False, startangle=0, **kwargs)

    参数说明

  • x: 数据数组,表示每个扇区的占比。

  • explode: 一个数组,表示每个扇区偏离圆心的距离,默认为 None。

  • labels: 每个扇区的标签,默认为 None。

  • colors: 每个扇区的颜色,默认为 None。

  • autopct: 控制显示每个扇区的占比,可以是格式化字符串或函数,默认为 None。

  • shadow: 是否显示阴影,默认为 False。

  • startangle: 饼图的起始角度,默认为 0。

  • **kwargs: 其他可选参数,用于定制饼图的外观。

  • x = [20,30,25,40]
    label = ['A','B','C','D']
    fig, axs = plt.subplots()
    
    # pie():绘制饼图
    # 参数:
    # x:数据数组
    # labels:数据对应的标签名称
    # autopct:是否自动显示百分比
    # startangle:饼图的起始位置
    axs.pie(x,labels=label, startangle=90)
    
    plt.show()

    折线图—plot()

    绘制折线图只需用上文python—matplotlib库-CSDN博客普通绘制图形的plot()函数就行,此处不再赘述。

    散点图—scatter()

    语法格式如下:

    ax.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None, **kwargs)

    参数说明

  • x: X 轴数据。

  • y: Y 轴数据。

  • s: 点的大小,可以是标量或数组。

  • c: 点的颜色,可以是标量、数组或颜色列表。

  • marker: 点的形状,默认为 'o'(圆圈)。

  • cmap: 颜色映射,用于将颜色映射到数据。

  • norm: 归一化对象,用于将数据映射到颜色映射。

  • vmin, vmax: 颜色映射的最小值和最大值。

  • alpha: 点的透明度,取值范围为 0 到 1。

  • linewidths: 点的边框宽度。

  • edgecolors: 点的边框颜色。

  • **kwargs: 其他可选参数,用于定制散点图的外观。

  • eg:
    x = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    data = [
            [120,132,101,134,90,230,210],
            [220,182,191,234,290,330,310]
        ]
    
    y0 = data[0]
    y1 = data[1]
    
    fig, axs = plt.subplots()
    
    # scatter():散点图
    # 参数:
    # x:x轴数据
    # y:y轴数据
    axs.scatter(x, y0, color='red')
    axs.scatter(x, y1, color='green')
    
    plt.show()

    图片读取***—imread()

    参数说明

  • fname: 图像文件的路径(字符串)。

  • format: 图像格式(可选)。如果未指定,imread 会根据文件扩展名自动推断格式

  • 返回值说明

  • 返回一个 NumPy 数组,表示图像的像素数据。数组的形状取决于图像的格式:

  • 对于灰度图像,返回一个二维数组 (height, width)

  • 对于彩色图像,返回一个三维数组 (height, width, channels),其中 channels 通常是 3(RGB)或 4(RGBA)。

  • # 此处获取文件路径需额外引入os库
    import os
    
    filepath = os.path.dirname(__file__)
    print(filepath)
    
    filepath = os.path.join(filepath, 'leaf.png')
    print(filepath)
    
    filepath = os.path.relpath(filepath)
    print(filepath)
    
    # imread():读取图片,生成多维数组
    data = plt.imread(filepath)
    
    print(data.shape)
    
    print(data)
    
    # data = data + 0.1
    print(data)
    
    # imshow():将数组显示为图片
    plt.imshow(data)
    
    plt.show()
    
    data1 = np.transpose(data, (2, 0, 1))
    
    for i in data1:
        plt.imshow(i)
        plt.show()
    
        # imsave(): 将数组保存为图片
        plt.imsave('leaf1.png', i)
    

    pandas库(篇1)

    引入库

    import pandas as pd
    import numpy as np

     

    内置数据结构

    Pandas 在 ndarray 数组(NumPy 中的数组)的基础上构建出了两种不同的数据结构,分别是 Series(一维数据结构)、DataFrame(二维数据结构):

  • Series 是带标签的一维数组,这里的标签可以理解为索引,但这个索引并不局限于整数,它也可以是字符类型,比如 a、b、c 等

  • DataFrame 是一种表格型数据结构,它既有行标签,又有列标签

  • 数据结构 维度 说明
    Series 1 该结构能够存储各种数据类型,比如字符数、整数、浮点数、Python 对象等,Series 用 name 和 index 属性来描述数据值。Series 是一维数据结构,因此其维数不可以改变
    DataFrame 2 DataFrame 是一种二维表格型数据的结构,既有行索引,也有列索引。行索引是 index,列索引是 columns。 在创建该结构时,可以指定相应的索引值

    Series

    创建series对象

    其语法格式如下:

    pd.Series(data,index,dtype)

    参数说明

  •  data:一组数据(ndarray 类型)
  • index:数据索引标签,如果不指定,默认从 0 开始
  • dtype:数据类型,默认会自己判断 copy:表示对 data 进行拷贝,默认为 False
  • 1、创建series空对象
    eg:
    # 创建一个空series对象
    s = pd.Series(dtype=np.int32)
    
    print(s)
    2、通过列表创建series对象
    eg:
    # 通过python列表创建series
    s = pd.Series([1,2,3,4,5,6])
    print(s)
    
    # 指定index标签
    index = ['a','b','c','d','e']
    s = pd.Series([3,4,5,6,7],index=index)
    print(s)
    
    3、通过ndarray创建series对象
    eg:
    # 通过ndarray创建series对象
    arr = np.array([1,2,3,4,5])
    s = pd.Series(arr)
    print(s)
    4、通过字典创建series对象
    eg:
    # 通过字典创建series,字典中的key是value的标签
    dict01 = {'id':1, 'name':'zhangsan', 'age':20}
    s = pd.Series(dict01)
    print(s)
     5、通过标量创建series对象
    eg:
    # 通过标量创建series
    s = pd.Series(5)
    print(s)
    
    s = pd.Series(5,index=[1,2,3,4,5])
    print(s)

    注:虽然对series对象的数据索引传递了5个值,而对应的值只传递了一个标量,但是会类似于数组广播,会自动将该标量值同时赋给所有的数据索引

    访问series数据

    通过标签名来获取元素、修改元素

    eg:
    s = pd.Series([10,20,30], index=['a','b','c'])
    print(s)
    
    # 根据标签名来获取元素、修改元素
    b = s['b']
    print(b)
    
    s['a'] = 100
    print(s)
    
    # 根据数组下标获取元素、修改元素       # 不过用此方法会出现警告
    b1 = s[1]
    print(b1)
    
    s[1] = 200
    print(s)
    

    series常用属性

    名称 属性
    axes 以列表的形式返回所有行索引标签
    dtype 返回对象的数据类型
    empty 返回一个布尔值,用于判断数据对象是否为空
    ndim 返回输入数据的维数
    size 返回输入数据的元素数量
    values 以 ndarray 的形式返回 Series 对象
    index 返回一个RangeIndex对象,用来描述索引的取值范围

    series常用方法

    head() 和 tail()

    作用:查看 series 的某一部分数据。其中 head() 返回前 n 行数据,默认显示前 5 行数据,tail() 返回后 n 行数据,默认为后 5 行

    isnull() 和 notnull()

    作用:用于检测 Series、DataFrame 中的缺失值。

  • isnull():如果为值不存在或者缺失,则返回 True

  • notnull():如果值不存在或者缺失,则返回 False

  • eg:
    s = pd.Series([1,2,3,4,5])
    # head():获取前n行数据,默认n=5
    print(s.head(3))
    # tail():获取后n行数据,默认n=5
    print(s.tail(3))
    
    s1 = pd.Series([1,2,3,4,None])
    # isnull():判断series对象中的元素是否为空,如果为空返回True,否则返回False
    print(s1.isnull())
    # notnull():判断series对象中的元素是否为空,如果不为空返回True,否则返回False
    print(s1.notnull())
    

    DataFrame

    Dataframe和Series的关系:

    在 Pandas 中,DataFrame 的每一行或每一列都是一个 Series

    DataFrame 是一个二维表格,可以看作是由多个 Series 组成的。

    如何区分行和列的 Series

    列的 Series

  • 标签是行索引。

  • 值是该列的所有行数据。

  • 行的Series:

  • 标签是列名。

  • 值是该行的所有列数据。

  • df = pd.DataFrame({'id':[1,2,3], 'name':['zhangsan','lisi','wangwu'], 'age':[20,21,22]})
    print(df)
    
    # DataFrame某一列的series对象:标签名是DataFrame的行标签
    print(df['id'])
    print('-----------------------------')
    # DataFrame某一行的series对象:标签名是DataFrame的列标签
    print(df.iloc[0])

    创建DataFrame对象

    其语法格式如下:

    pd.DataFrame( data, index, columns, dtype, copy)

    参数说明

  • data:一组数据(ndarray、series, map, lists, dict 等类型)
  • index:索引值,或者可以称为行标签
  • columns:列标签,默认为 RangeIndex (0, 1, 2, …, n)
  • dtype:数据类型
  • copy:默认为 False,表示复制数据 data
  • 1、创建DataFrame空对象
    # 创建DataFrame空对象
    df = pd.DataFrame()
    print(df)
    2、通过列表创建DataFrame对象
    # 通过列表创建DataFrame
    df = pd.DataFrame([1,2,3])
    print(df)
    # 指定列索引名称
    df = pd.DataFrame([1,2,3],columns=['A'])
    print(df)
    
    3、通过列表嵌套列表(二维数组)创建DataFrame对象
    # 通过二维数组创建DataFrame
    data = [['A',1], ['B',2], ['C',3]]
    # 指定列索引和行索引,指定列/行索引时要注意索引元素个数要和索引的元素个数一致
    df = pd.DataFrame(data, columns=['name','age'],index=['a','b','c'])
    print(df)
    4、通过列表嵌套字典创建DataFrame对象
    # 通过列表嵌套字典创建DataFrame
    # 如果字典中有字段缺失,则默认填充Nan(not a number)
    data = [{'name':'zhangsan','age':20},{'name':'lisi','age':21,'sex':'男'}]
    df = pd.DataFrame(data)
    print(df)
    5、通过字典嵌套列表创建DataFrame对象
    # 通过字典嵌套列表创建DataFrame
    data = {'name':['zhangsan','lisi'], 'age':[20,30]}
    df = pd.DataFrame(data)
    print(df)
    6、通过series对象创建DataFrame对象
    # 通过series对象创建DataFrame
    # DataFrame默认使用series对象中的索引标签作为DataFrame的行索引
    # 需要指定DataFrame的行标签索引时,要在Series()中指定
    data = {'name':pd.Series(['zhangsan','lisi'], index=['a','b']), 'age':pd.Series([10,20], index=['a','b'])}
    df = pd.DataFrame(data)
    print(df)

     

    列索引操作

    DataFrame 可以使用列索(columns index)引来完成数据的选取、添加和删除操作

    获取数据
    df = pd.DataFrame({'name':['zhangsan','lisi'], 'age':[20,30], 'id':[1,2]})
    # 根据列名获取某一列的数据,结果是列的series对象
    s = df['name']
    print(s)
    # 将series对象转换为python列表
    print(list(s))
    添加数据
    df = pd.DataFrame({'name':['zhangsan','lisi'], 'age':[20,30], 'id':[1,2]})
    # 添加一列空数据,在df中要制定新列名:df['sex']
    df['sex'] = None
    print(df)
    # 添加一列数据,数据格式可以时python列表,也可以是series对象
    df['sex'] = ['男','女']
    print(df)
    # assign(key=values):添加新列,key作为DataFrame的列名,values作为DataFrame的列值,可以链式调用
    df = df.assign(address=['四川省', '重庆市']).assign(password=['123456', '654321'])
    print(df)
    
    # insert():在指定位置插入一个新列
    # 参数:
    # loc:新列要插入的位置
    # column:要插入的新列名
    # value:要插入的新列的值,可以是列表,也可以是series对象
    df.insert(1,'tel',['123456789', '987654321'])
    print(df)
    修改数据
    df = pd.DataFrame({'name':['zhangsan','lisi'], 'age':[20,30], 'id':[1,2]})
    # 修改列,通过已存在的列名进行直接赋值即可修改该列的数据
    df['age'] = [40,50]
    print(df)
    
    # 对某一列进行算术运算,然后再重新赋值给该列
    df['age'] = df['age'] - 10
    print(df)
    
    # 通过直接赋值来修改列名
    df.columns = ['A','B','C']
    print(df)
    
    # 通过rename()方法修改列名
    # 参数:
    # columns:指定新列名,格式:字典类型,key为原列名,value为新列名
    df = df.rename(columns={'A':'name','B':'age','C':'id'})
    print(df)
    
    
    print(df['age'].dtype)
    # astype():修改某一列的数据类型
    df['age'] = df['age'].astype('str')
    print(df['age'].dtype)
    删除数据
    df = pd.DataFrame({'name':['zhangsan','lisi'], 'age':[20,30], 'id':[1,2]})
    # drop():删除方法,既可以删除行,也可以删除列
    # 参数:
    # labels:要删除的列/行标签
    # axis:指定按行或按列删除,axis=0,表示按行删除;axis=1,表示按列删除,默认为0
    # inplace:是否原地修改,如果为True,则在原数据上进行删除;如果为False,则先备份一个副本,然后在副本上进行删除,默认为False
    df1 = df.drop(['id','age'],axis=1)
    print(df1)
    
    df.drop(['id'],axis=1,inplace=True)
    print(df)


    总结

    作者:Liu df

    物联沃分享整理
    物联沃-IOTWORD物联网 » python—pandas库(补充上文matplotlib库中部分作图内容)

    发表回复