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)
参数说明
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)
参数说明
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