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 是一种表格型数据结构,它既有行标签,又有列标签

数据结构维度说明
Series1该结构能够存储各种数据类型,比如字符数、整数、浮点数、Python 对象等,Series 用 name 和 index 属性来描述数据值。Series 是一维数据结构,因此其维数不可以改变
DataFrame2DataFrame 是一种二维表格型数据的结构,既有行索引,也有列索引。行索引是 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)


总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值