Python常用库

image-20250315123113669

1、matplotlib

matplotlib

设置中文

#todo 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置全局字体为黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

matplotlib 转门用于开发 2D 、 3D 图表的 包

基本使用方法如下:

import matplotlib.pyplot as plt
#1、创建画布
plt.figure(figsize=(20,8),dpi=100)# figsize画布的大小 dpi 图形清晰度
#2、绘制图像
plt.plot([1,2,3,4,5,6,7,8,9,10],[10,14,12,13,21,23,11,16,17,19])
#3、图像显示
plt.show()

plt.figure()常用参数

plt.figure()用于创建一个画布

参数名含义是否必需默认值示例
num图形的编号或名称。可以是整数或字符串。若为整数,代表图形的编号;若为字符串,则作为图形窗口的标题。自动分配一个编号plt.figure(num=2)plt.figure(num='My Plot')
figsize图形的大小,以英寸为单位,是一个包含两个元素的元组 (宽度, 高度)(6.4, 4.8)plt.figure(figsize=(10, 6))
dpi图形的分辨率,即每英寸点数(dots per inch)。数值越大,图形越清晰。100plt.figure(dpi=200)
facecolor图形的背景颜色。可以是颜色名称(如 'red')或颜色代码(如 '#FF0000')。'white'plt.figure(facecolor='lightgray')
edgecolor图形的边框颜色。同样可以是颜色名称或颜色代码。'black'plt.figure(edgecolor='blue')
frameon是否绘制图形的边框。布尔值,True 表示绘制,False 表示不绘制。Trueplt.figure(frameon=False)

plt.plot()常用参数

plt.plot() 函数用于绘制折线图,以下是该函数的常用参数

参数名含义是否必需示例
x可选参数,代表 x 轴的数据,是一个一维数组或列表。若不提供 x 参数,matplotlib 会默认使用 [0, 1, 2, ...] 作为 x 轴的数据。plt.plot([1, 2, 3], [4, 5, 6])[1, 2, 3]x
y必需参数,代表 y 轴的数据,是一个一维数组或列表。plt.plot([1, 2, 3], [4, 5, 6])[4, 5, 6]y
fmt可选参数,是一个格式化字符串,用于快速设置线条的颜色、标记样式和线条样式。例如 'ro-' 表示红色(r)的圆形标记(o)和实线(-)。plt.plot([1, 2, 3], [4, 5, 6], 'go--')
color可选参数,指定线条的颜色。可以是颜色名称(如 'red')或颜色代码(如 '#FF0000')。r 红色 、g绿色、b蓝色、w白色、c青色plt.plot([1, 2, 3], [4, 5, 6], color='green')
linestyle可选参数,指定线条的样式,如 '-'(实线)、'--'(虚线)、'-.'(点划线)、:'(点虚线)、''(空格)。plt.plot([1, 2, 3], [4, 5, 6], linestyle='--')
linewidth可选参数,指定线条的宽度,是一个浮点数。plt.plot([1, 2, 3], [4, 5, 6], linewidth=2.5)
marker可选参数,指定数据点的标记样式,如 'o'(圆形)、's'(正方形)等。plt.plot([1, 2, 3], [4, 5, 6], marker='s')
markersize可选参数,指定标记的大小,是一个浮点数。plt.plot([1, 2, 3], [4, 5, 6], markersize=10)

添加图例

image-20250315152946133

一个坐标系-多个图相

import matplotlib.pyplot as plt
import random
#todo 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置全局字体为黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题
#准备数据
x = range(60)
# range是python的内置函数 创建一个不可变的整数序列
#range(start,stop,step)
#print(x) 打印 range(0,60)意思是x是一个从0(包含)到60(不包含)的整数序列
y = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(1,3) for i in y]
#列表推导式->一种简洁的创建列表的方式 [expression for item in iterable]
#random.uniform(a,b)用于生成一个在a(包含)到b(不包含)之间的随机浮点数
#1、创建画布
plt.figure(figsize=(10, 4), dpi=100, edgecolor='red', frameon=True)
# figsize画布的大小 dpi 图形清晰度
#2、绘制图像 -- 一个坐标系 绘制多个图像 多次调用plt
plt.plot(x,y,label='上海')
plt.plot(x,y_beijing,color="r",linestyle='--',label='北京')
#添加图例
plt.legend(loc='best')
#准备x、y轴刻度
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)
#修改x、y轴刻度显示
# plt.xticks(x_ticks_label[::5]) 报错 坐标刻度 不能直接通过 字符串 修改
plt.xticks(x[::5], x_ticks_label[::5],rotation=45)#rotation 把标签旋转
plt.yticks(y_ticks[::5])
#添加网格显示
plt.grid(True,linestyle='--',alpha=0.5)
#添加描述信息
plt.xlabel('时间')
plt.ylabel('温度')
plt.title('中午11点-12点某城市温度变化')
#图像保存 ->放在 show 前面 show会释放figure资源
plt.savefig('test.png')
#3、图像显示
plt.show()

image-20250316142651730

多个坐标系显示

import matplotlib.pyplot as plt
import random
#todo 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置全局字体为黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题
# 0、准备数据
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]
# 1、创建画布
​
fig,axes = plt.subplots(nrows=1,ncols=2,figsize=(10,4),dpi=100)
#            一行     两列
# 2、绘制图像
axes[0].plot(x,y_shanghai,label='上海')
axes[1].plot(x,y_beijing,color="r",linestyle='--',label='北京')
​
# 3、准备x、y轴刻度 , 构造x轴标签
​
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)
# 4、修改x、y轴刻度显示
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
axes[0].set_xticklabels(x_ticks_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_label[::5])
​
# 5、添加网格显示
axes[0].grid(True,linestyle='--',color='r',alpha=0.5)
axes[1].grid(True,linestyle='--',color='g',alpha=0.5)
​
# 6、添加描述信息
axes[0].set_xlabel('时间')
axes[0].set_ylabel('温度')
axes[0].set_title("中午11点-12点,上海温度变化图",fontsize=20)
​
axes[1].set_xlabel('时间')
axes[1].set_ylabel('温度')
axes[1].set_title("中午11点-12点,北京温度变化图",fontsize=20)
# 7、图像保存 ->放在 show 前面 show会释放figure资源
plt.savefig('test2.png')
​
# 8、添加图例
axes[0].legend(loc=0)
axes[1].legend(loc=0)
# 9、图像显示
plt.show()

image-20250316142630162

折线图的应用场景

使用 numpy 的 sin函数

import matplotlib.pyplot as plt
import numpy as np
​
# 1、准备数据
x = np.linspace(-10, 10, 1000)
# 从 -10 到 10 之间生成一千个数
y = np.sin(x)
​
# 2、创建画布
plt.figure(figsize=(10, 4),dpi=100)
​
# 3、绘制图像
plt.plot(x,y)
​
# 4、添加网格
plt.grid(True)
​
# 5、图像显示
plt.show()

image-20250316142548454

常见图形绘制

  1. 折线图:plt.plot(x,y)

  2. 散点图:plt.scatter(x,y)

  3. 柱状图:plt.bar(x,witdh,align='center',**kwargs)

    x:需要传递的数据

    width:柱状图的宽度

    align:每个柱状图的位置对齐方式 {'center','edge}

    **kwargs:color:柱状图的颜色

  4. 直方图:plt.hist(x,bins:None)

    处理连续的数据

    y轴:表示每个箱内数据点的数量

    x:数据

    bins:组距

    1. 如果 bins 为整数,表示 有 bins 个柱子

    2. 如果 bins 为序列,表示每个箱的边界

      [0,1,2,3,4]->[0,1),[1,2),[2,3),[3,4)

    image-20250316142005686

  5. 饼图:plt.pie(x,labels,autopct,colors)

    x:数量,自动计算百分比

    labels:每部分标签(名称)

    autopct:占比显示指定 %1.2f%%

    colors:每部分颜色

1、散点图绘制

import matplotlib.pyplot as plt
​
# 1、准备数据
X=[225.98,247.07,253.14,457.85,241.58,301.01,20.67,288.64,
163.56,120.06,207.83,342.75,147.9,553.06,224.72,29.51,
21.61,483.21,245.25,399.25,343.35]
y=[196.63,203.88,210.75,372.74,202.41,247.61,24.9,239.34,
140.32,104.15,176.84,288.23,128.79, 49.64,191.74,33.1,
30.74,400.02,205.35,330.64,283.451]
​
# 2、创建画布
plt.figure(figsize=(10, 4),dpi=100)
​
# 3、绘制图像
plt.scatter(X,y)
​
# 4、添加网格
plt.grid(True)
​
# 5、图像显示
plt.show()

image-20250316142519093

2、柱状图绘制

import matplotlib.pyplot as plt
#todo 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置全局字体为黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题
#0.准备数据
#电影名字
movie_name=['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其他']
#横坐标
x=range(len(movie_name))
#票房数据
y=[73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]
#1.创建画布
plt.figure(figsize=(20,8),dpi=100)
#2.绘制柱状图
plt.bar(x,y,width=0.5,color=['b','r','g','b'])
#2.1b修改x轴的刻度显示
plt.xticks(x,movie_name)
#2.2添加网格显示
plt.grid(linestyle="--",alpha=0.5)
#2.3添加标题
plt.title("电影票房收入对比")
#3.显示图像
plt.show()

image-20250316143714599

1.2 Seaborn

安装

pip install seaborn

导入

import seaborn as sns

2、numpy

Numpy是一个科学计算库,用于快速处理任意维度的数组

支持 常见数组 和 矩阵 的操作

Numpy 使用 ndarray 对象来处理多维数组

ndarray介绍

np.array(object,dtype)

处理二维数组

import numpy as np
# 创建ndarray
score = np.array(
[[80, 89, 86, 67, 79],
[78, 97, 89, 67, 81],
[90, 94, 78, 67, 74],
[91, 91, 90, 67, 69],
[76, 87, 75, 67, 86],
[70, 79, 84, 67, 84],
[94, 92, 93, 67, 64],
[86, 85, 83, 67, 80]])
print(score)

ndarray 比 python 原生 list 与运算效率 更高

import random
import time
import numpy as np

# 生成包含 100000000 个随机数的列表
a = []
for i in range(100000000):
    a.append(random.random())

# 使用 time 模块测量 sum 函数的执行时间
start_time_1 = time.time()
sum1 = sum(a)
end_time_1 = time.time()
print(f"使用内置 sum 函数计算的和: {sum1}")
print(f"内置 sum 函数执行时间: {end_time_1 - start_time_1} 秒")

# 将列表转换为 numpy 数组
b = np.array(a)

# 使用 time 模块测量 np.sum 函数的执行时间
start_time_2 = time.time()
sum2 = np.sum(b)
end_time_2 = time.time()
print(f"使用 numpy 的 sum 函数计算的和: {sum2}")
print(f"numpy 的 sum 函数执行时间: {end_time_2 - start_time_2} 秒")
使用内置 sum 函数计算的和: 50000649.008911066
内置 sum 函数执行时间: 0.48445725440979004 秒
使用 numpy 的 sum 函数计算的和: 50000649.00891127
numpy 的 sum 函数执行时间: 0.1631016731262207 秒

ndarray在存储数据的时候,数据和数据的地址都是连续

list在存储数据的时候,数据和数据的地址是不连续

使得批量操作数组元素时,ndarray的速度更快

ndarray支持并行运算

numpy底层用C语言写,效率远高于纯python代码

属性

image-20250317101010928

import numpy as np
# 创建ndarray
score = np.array(
[[80, 89, 86, 67, 79],
[78, 97, 89, 67, 81],
[90, 94, 78, 67, 74],
[91, 91, 90, 67, 69],
[76, 87, 75, 67, 86],
[70, 79, 84, 67, 84],
[94, 92, 93, 67, 64],
[86, 85, 83, 67, 80]])
print(score.shape)#(8,5) 返回表示数组维度的元组
print(score.ndim)#2 数组维度
print(score.size)#40 元素数量
print(score.itemsize)# 一个数组元素的长度(字节)
print(score.dtype)#数组元素的类型

dtype

image-20250317102512245

import numpy as np
# 创建数组时指定类型     数组  , dtype = 类型
score = np.array([[1,2,3],[1,2,3]],dtype=np.float64)
print(score)

一、数组

1、生成0、1数组

# np.ones(shape,dtype)
# np.zeros(shape,dtype)
# np.ones_like(arr,dtype)
# np.zeors_like(arr,dtype)
score = np.ones([5,5])
'''
[[1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]]
'''

2、从现有数组生成

arr = np.array([1,2,3],[3,2,1])
# np.array(arr) 深拷贝  新的数组
# np.asarray(arr) 浅拷贝

3、生成固定范围的数组

1、np.linspace(start,stop,num,endpoint)

创建 等差数组 - 指定数量

start : 序列起始值 ,stop : 序列终止值,num:要生成的等间隔的样例数量,默认50,endpoint:序列中是否包含 stop 值,默认true

import numpy as np
score = np.linspace(0, 100, 11,dtype=np.int64)
print(score)
# [  0  10  20  30  40  50  60  70  80  90 100]

2、np . arange ( [start=0] , stop , [step=1] , dtype )

创建 等差数组 - 指定步长

import numpy as np
score = np.arange(0, 30, 2,dtype=np.int64)
print(score)
# [ 0  2  4  6  8 10 12 14 16 18 20 22 24 26 28]

3、np . logspace( start , stop , num )

生成 从 10^start 到 10^stop 的 num 个数

用于生成在对数刻度 均匀分布的数字序列。这个函数特别有用,当你需要在对数尺度上创建一组数时,比如用于绘制对数坐标图

import numpy as np
score = np.logspace(0, 5, 3,dtype=np.int64)
print(score)

4、np .random 随机数组

1、正态分布

image-20250317110817059

方差越小 越瘦高

方差越大 越矮胖

image-20250317110623133

正态分布创建方式

image-20250317111136358

image-20250317111343398

np.random.normal(均值,标准差,size)

size:

  1. 数组 生成一个一维数组,包含指定数量的随机数

  2. 元组 生成一个多维数组,形状由元组决定

import numpy as np
import matplotlib.pyplot as plt
x = np.random.normal(0,1,100000000)
plt.figure(figsize=(10,4),dpi=100)
plt.hist(x,1000)
plt.show()

image-20250317111821267

2、均匀分布

image-20250317114814522

import numpy as np
import matplotlib.pyplot as plt
x1 = np.random.uniform(-1,1,100000000)#从 -1 到 1 一亿个数据
plt.figure(figsize=(20,8),dpi=100)
plt.hist(x1,bins=1000)# 划分为 1000 组
plt.show()

image-20250317115607978

4、数组的基本操作

1、形状修改

ndarray.reshape(shape,order) -- 不会修改原数组,返回新数组

  • ndarray.reshape([-1,2]) :未知行 2 列 【-1表示待计算】

  • ndarray.reshape([3,-1]) :3 行 未知列 ,如果 不能被 3 整除,则报错

image-20250318122242307

ndarray.resize(new_shape) -- 修改原数组,没有返回值

ndarray.reshape.T 转置 ,例:把原本的[3,2]变成[2,3]

2、类型修改

ndarray.astype(np.int64)

ndarray.tostring()

3、数组的去重

ndarray.unique() 返回一个新数组

import numpy as np
a = np.array([[1,2,3,4],[2,3,4,5]])
print(a)
#[[1 2 3 4]
# [2 3 4 5]]
a = np.unique(a)
print(a)
#[1 2 3 4 5]

4、数组的运算

1、逻辑运算
1、逻辑判断

ndarray 判断

返回新的ndarray

import numpy as np
a = np.random.randint(40,100,(10,5))
print(a)
a = a[6:]
print('--获取后四行--')
#[[42 41 92 81 97]
# [81 73 75 84 58]
# [65 43 64 88 93]
# [57 60 81 62 92]]
a = a>60 # 返回值赋值
print(a)
#[[ True  True  True False  True]
# [ True  True False False False]
# [False  True  True  True False]
# [ True  True  True False False]]
2、bool赋值

将满足条件的元素设置为指定的值

直接修改原数组

import numpy as np
a = np.random.randint(40,100,(10,5))
print(a)
a = a[6:]
print('--获取后四行--')
# 直接对数组修改 满足条件的赋值为1
a[a>60] = 1
print(a)
2、通用判断函数
  • np.all( 逻辑判断 )

  • 返回:bool值

import numpy as np
a = np.random.randint(40,100,(10,5))
# 直接对数组修改 满足条件的赋值为1
b =  np.all(a[0:2,:]>60)
print(b)
  • np.any( 逻辑判断 )

  • 返回:bool值

b =  np.any(a[0:2,:]>90)
3、三元运算符

单一逻辑判断

  • np.where( 逻辑判断 ,满足的赋值 ,不满足的赋值 )

  • 通过 np.where 能够进行更加复杂的运算

temp = np.where(a[:4,:]>60,1,0)
#                      满足赋值为1
#                      不满足赋值为0

复合逻辑判断

  • 需要使用np.logical_andnp.logical_or

temp = np.where( np.logical_and ( a>60,a<90 ),1,0 )
4、统计运算
4.1统计指标

image-20250322213025753

前面都要加np

统计值

  • np.max(a,axis)

  • np.min(a,axis)

  • np.median(a,axis) 计算数组元素的中位数

  • np.mean(a,axis) 计算数组元素的平均值

  • np.std(a,axis) 计算数组元素的标准差

  • np.var(a,axis) 计算数组元素的方差

import numpy as np
a = np.random.randint(40,100,(10,5))
a = a[:4,:4]
print("前四名学生中,各科成绩的最高分分别是{}".format(np.max(a,axis=0)))
#  a 是数据,
#  axis 是轴
#  有可能axis=0代表列 axios=1代表行
#  有可能axis=0代表行 axios=1代表列
#  要自己先试一下
# 如果传了 axis 返回的是一个数组
# 如果不传 axis 则返回的是二维数组中最max的一个值

统计值对应的下标

  • np.argmax(a,axis)

  • np.argmin(a,axis)

print("前四名学生中,各科成绩的最高分的同学的下标是{}".format(np.argmax(a,axis=0)))
#前四名学生中,各科成绩的最高分的同学的下标是[1 2 0 0]

5、数组间运算

1、数组与数的运算

对于 ndarray 数组

import numpy as np
a = np.array([1,2,3,4,5,6,7,8,9,10])
# 数组与数的运算
a = a+1
print("a+1后,a={}".format(a))
a = a/2
print("a/2后,a={}".format(a))
# a+1后,a=[ 2  3  4  5  6  7  8  9 10 11]
# a/2后,a=[1.  1.5 2.  2.5 3.  3.5 4.  4.5 5.  5.5]

对于 原生python 列表

不能实现 b = b+1,会报错

只能使用 列表推导式

b = [1,2,3,4,5,6,7,8,9,10]
b = [i+1 for i in b]
print("b+1后,b={}".format(b))

如果 b = b * 3,会把列表的元素复制 3 次

b = [1,2,3]
b = b*3
print("b*1后,b={}".format(b))
#b+1后,b=[1, 2, 3, 1, 2, 3, 1, 2, 3]

2、数组与数组的运算

2.1广播机制

image-20250322220334036

(4,1) 延伸为 (4,3)

(3,) 延伸为 (4,3)

再相加

广播(Broadcasting)是一种强大的机制,它允许在不同形状的数组之间进行算术运算。广播机制的核心思想是让较小的数组在某些维度上进行扩展,使其形状与较大的数组兼容,从而可以进行元素级别的操作

触发广播机制的条件

多个数组进行运算,如果shape不相同

满足一个即可 触发广播机制

  • 数组的某一维度大小等长

  • 其中一个数组的某一个维度大小为1

步骤:

1、补齐维度数量

两个数组进行广播时,从右向左比较它们的维度大小。如果两个数组的维度数量不同,会在维度数量较少的数组的左侧补 1,直到两个数组的维度数量相同。

2、比较维度大小

每一个维度都要满足 上述两个条件之一,才能触发广播机制

例如,有一个形状为 (3, 1) 的数组 A 和一个形状为 (3,) 的数组 B

  • 数组 A 的维度为 2,形状是 (3, 1)。 3x1

  • 数组 B 的维度为 1,形状是 (3,)。 1x3 为了使它们的维度数量相同,会在数组 B 的左侧补 1,将其形状变为 (1, 3)

从右到左比较维度大小

3 x 1

1 x 3

右侧维度大小 有一个为1——》满足

左侧维度大小 有一个为1——》满足

再举一个栗子

3x2

1x3

右侧维度大小 不满足相等 也不满足 为1 ——》无法广播

不用再看左边

如果两个数组无法进行广播操作,会抛出 ValueError 异常。

广播机制要求所有对应维度都满足特定条件,只要有一个维度不满足,就不能进行广播。

二、矩阵和向量

1、矩阵

矩阵 matrix ,必须是 二维

2、向量

一种特殊的矩阵,一般是列向量,(3,1) 列向量

3、矩阵的运算

  • np.matmul(矩阵a,矩阵b) 只能矩阵乘矩阵

  • np.dot(矩阵a,矩阵b || 数字 ) 能矩阵 乘 矩阵,也能矩阵 乘 数字

3、pandas

1、介绍

image-20250322225702934

作用:

  1. 增强图标可读性

  2. 便捷的数据处理能力

  3. 读取文件方便

  4. 封装了 matplotlib、numpy 的画图和计算

2、Pandas数据结构

  • Series结构 —— 一维数据结构

  • Dataframe结构 —— 二维的表格型数据结构

  • Multilndex和panel结构 —— 三维的数据结构

1、Series

由 数据 和 索引 组成

1.1、Series的创建
import pandas as pd
pd.Series(data=None,index=None,dtype=None)
  • data:传入的数据,可以是ndarray、list、字典

  • index:索引,必须是唯一的,并且与数据的长度相等,如果不传入索引,会自动创建从0~N的整数索引

指定索引

pd.Series([1,2,3,4,5],index=[1,2,3,4,5])

通过字典创建

series = pd.Series({'red':100,'blue':200,'green':300})
#创建后 red、blue、green就是索引值
print(series)
#red      100
#blue     200
#green    300
#dtype: int64
print(series['red'])
# 打印 100
1.2、Seires的属性
  • index:获取 Series 对象的下标

  • values:获取 Series 对象的 值

    import pandas as pd
    series = pd.Series({'red':100,'blue':200,'green':300})
    index = series.index
    print(index)
    # Index(['red', 'blue', 'green'], dtype='object')
    values = series.values
    print(values)
    # [0 1 2 3 4 5 6 7 8 9]

2、Dataframe

二维数组对象

行索引:axis = 0

列索引:axis = 1

2.1、Dataframe的创建
import pandas as pd
df = pd.DataFrame(data=None,index=None,columns=None)
  • index:行标签,若不传入,创建0~N的索引

  • columns:列索引,若不传入,创建0~N的索引

例如

import pandas as pd
import numpy as np
df = pd.DataFrame(data=np.array([[100,87],[99,96]]),index=['小明','小红'],columns=['语文','数学'])
print(df)
#     语文  数学
#小明  100  87
#小红   99  96
2.2、Dtaframe的属性
  • shape : 维度形状,

    如果是(5,3),则df.shape[0]是5,[1]是3

  • index:行索引列表

  • columns:列索引列表

  • values:得到array的值

  • head(行数=5):显示前几行,默认为5

  • tail(行数=5):显示后几行,默认为5

2.3、修改行索引

image-20250323142727883

image-20250323142941196

image-20250323143246818

image-20250323143235037

2.3、MultiIndex 多重索引
  • df.index.names

  • df.index.lavels

  • df.index.codes

创建多重索引
import pandas as pd

arrays = [[1, 2, 3, 4], ['blue', 'red', 'blue', 'red']]
mp = pd.MultiIndex.from_arrays(arrays, names=['number', 'color'])

# 创建一个具有多重索引的 DataFrame
data = {'value': [10, 20, 30, 40]}
df = pd.DataFrame(data, index=mp)
print(df)

或者 直接df设置多个行索引

image-20250323145335690

2.4、从DF中获取Series
  • df['列名'],保留了行索引的信息

  • df.values 返回一个ndarray,失去了行索引的信息,每一个元素代表一行的信息

3、基本数据操作

1、数据读取

  • pd.read_csv():读取csv文件,转化成df格式

  • 删除列:pd.drop(["列名"],axis=1【表示删除列】)

2、数据选择

1、基于索引数字选择

  • pd.iloc[]

    参数

    1. 整数。例如:5

      pd.iloc[5]#选择第6行
    2. 整数构成的列表或数组。

      pd.iloc[[1,2,3]]#选择第2、3、4列
    3. 布尔数组。

    4. 可返回索引值的函数或参数。

    5. 切片

      pd.iloc[:5]#选择前五行
      pd.iloc[:,1:4]#选择第2-4列
2、基于标签名选择
  • pd.loc[ ]

    参数

    1. 单个标签。例如:2'a',这里的 2 指的是标签而不是索引位置。

    2. 列表或数组包含的标签。例如:['A', 'B', 'C']

      df.loc[:, 'Total Population':'Total Males']
    3. 切片对象。例如:'A':'E',注意这里和上面切片的不同之处,首尾都包含在内

    4. 布尔数组。

    5. 可返回标签的函数或参数。

3、直接使用行列索引

data['列名']['行名']

3、赋值

  • df.close = 1 ——>把列名为 close 的值都设置为1

  • 或者 df[ 'close' ] = 1'

  • 或者 df.loc[:,'close'] = 1

4、排序

1、Dataframe排序
  • df.sort_values()

  • df.sort_index()

多个键排序:先根据第一个排序,如果第一个相等,则再比较第二个,以类推

image-20250323155349224

2、Series排序

image-20250323155705166

5、算数运算

1、加减
  • df['列名'].add(值)

  • df['列名'].sub(值)

2、逻辑运算
  • 逻辑赋值:data['列名'] > 20

    只要大于20都赋值为True

  • 选择满足条件的一行,多个条件

    data[ (data['列名']>20 & data['列名']<24 ) ]

  • query(字符串)

    data.query("open>20 & open<24"),这里的列名不用加""

  • isin(数组),看元素的值是否属于这个数组

    data[ data['open'] . isin([23.23,23.78]) ]

3、统计运算
describe
  • df.describe()

统计函数

image-20250323162650713

  • 例如:sum(1)【1表示以行为轴,0表示以列为轴】

  • 默认为0,

  • median()先把数据从小到大排列,再取中位数

  • idmax():返回指定轴上最大值所在元素的索引标签

  • idmin():返回指定轴上最小值所在元素的索引标签

image-20250323163757558

累计统计函数

image-20250323164021260

自定义运算

image-20250323170833245

4、pandas画图

df对象.plot(kind='line')

image-20250323171124783

image-20250323171512386

5、文件读取与存储

CSV文件

image-20250323171711908

image-20250323172252447

HDF5文件

  • pd.to_hdf("路径.h5",key="字符串")

  • pd.read_hdf("路径".h5,key="字符串")

image-20250324102233600

image-20250324102430755

JSON

image-20250324102525722

6、缺失值的处理

  • np.nan ——>NaN

  • pd.isnull(df)

  • pd.notnull(df)

  • pd.fillna(替换值,inplace = bool)

  • pd.dropna()

image-20250324103947389

image-20250324104329668

image-20250324104300365

读取文件时,报错,取消证书验证

image-20250324105709608

缺失值不为Nan

image-20250324105941734

7、数据离散化

1、离散化

image-20250324111452417

image-20250324111428831

image-20250324111710907

2、将分类变量变成哑变量

  • get_dummies

image-20250324113732990

8、合并

1、数据的合并

  • pd.concat()

  • pd.merge()

image-20250324113956266

image-20250324114310395

image-20250324114727889

image-20250324114718200

9、交叉表与透视表

  • crosstab

  • pivot_table

image-20250324151610549

10、分组聚合

  • groupby(by=分组的键,as_index=bool【分组的键是否作为索引】)

  • 根据指定的键分组

  • 对每个组进行求和、计数、求平均值等等

  • 每个组的结果组合成一个新的对象

有一个dataframe 名为 df

image-20250324153937103

df.groupby(['color'])['price1'].mean()
#     按 color 分组,计算 price1 列的平均值
# df.groupby(['color'])返回的是一个DataFrameGroupBy对象
# 对象['price1']获取对象的这一列

df['price1'].groupby(df['color']).mean()

都可以得到

image-20250324154144017

如果不想要 color作为行索引

df.groupby(['color'],as_index=False)['price1'].mean()
#                     不作为行索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值