chinesecalendar
可以用来判断某年某月某一天是不是工作日/节假日。
支持2004年至2021年,包括2020年的春节延长。
pip install chinesecalendar
math
import math # 或者调用math模块下面的所有函数 from math import *
print(math.pi) # 圆周率 3.141592653589793
x = 3.4
print(math.ceil(x)) # 向上取整 4
print(math.floor(x)) # 向下取整 3
y = 2
print(math.pow(x, y)) # 11.559999
z =144
print(math.sqrt(z)) # 12.0
list_num = [1, 2, 4, 7, 10, 145]
print(math.fsum(list_num)) # 求和 169.0
datetime
import datetime
now = datetime.datetime.now()
print(now)
print(now.isocalendar())
# datetime类型转换为字符串,格式化显示
print(datetime.datetime.strftime(now, "%Y-%m-%d"))
# 字符串转换为datetime类型,解析时间字符串
# 前者放的是解析parse的字符串,后者放的是解析的格式
date_str = input('请输入日期(yyyy/mm/dd):')
print(datetime.datetime.strptime(date_str, format('%Y/%m/%d')).isocalendar())
os
os(operate system),用于访问操作系统功能的模块。
使用os模块中提供的接口,可以实现跨平台访问,通用操作有:
1.获取平台信息;
2.对目录的操作(增删改查);
3.判断操作。
import os
print(os.sep) # 主要用于系统路径的分隔符 \
# windows 输出 nt;linux 输出 posix
print(os.name) # 指示你正在使用的工作台 nt
print(os.getenv('path')) # 读取环境变量 一堆
print(os.getcwd()) # 获取当前的路径 C:\Users\Administrator\Desktop
os.listdir() # 返回指定目录下的所有文件和目录名
os.mkdir() # 只创建一个目录文件
os.rmdir() # 删除一个空目录,若目录中有文件则无法删除
os.makedirs(dirname) # 可以生成多层递归目录。若目录全部存在,则创建目录失败
os.removedirs(dirname) # 可以删除多层递归的空目录
os.chdir() # 改变当前目录到指定目录中
os.rename() # 重命名目录名或者文件名。重命名后的文件名已存在,则重命名失败
os.path.exists(path) # 判断文件/目录是否存在
os.path.isfile(path) # 判断是否为文件
os.path.isdir(path) # 判断是否为目录
os.path.basename(path) # 返回文件名
os.path.dirname(path) # 返回文件路径
os.path.getsize(name) # 获得文件大小
os.path.abspath(name) # 获得绝对路径
os.path.join(path, name) # 连接目录与文件名或目录
numpy
相关属性
import numpy as np
array = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(array)
print(array.ndim)#维度
print(array.shape)#形状
print(array.size)#大小
print(array.dtype)#元素类型
创建数组
a = np.array([1,2,3],dtype=np.int32)
b = np.array([1,2,3],dtype=np.float)
c = np.array([1,2,3])#一维数据
d = np.array([[1,2,3],[4,5,6]]) #二维矩阵
zero = np.zeros((2,3)) #生成2行3列全为0的矩阵
one = np.ones((3,4)) #生成3行4列全为1的矩阵
empty = np.empty((3,2))#生成3行2列全都接近于0(不等于0)的矩阵
e = np.arange(10)#生成0-10的数列
f = np.arange(4,12)#生成4到12,不包含12的数列
g = np.arange(1,20,3)#生成1到20,不包含20,中间间隔是3的数列
h = np.arange(8).reshape(4,2)#重新定义矩阵的形状
数组运算
arr1 = np.array([[1,2,3],[4,5,6]]) # 2行3列
arr2 = np.array([[1,1,2],[2,3,3]])
arr3 = arr1 + arr2
arr4 = arr1 - arr2
arr5 = arr1 * arr2 #按位相乘
arr6 = arr1 ** arr2 #幂运算
arr7 = arr1 / arr2
arr8 = arr1 % arr2 # 取余
arr9 = arr1 // arr2
arr10 = arr1 + 2 # 所有元素加2
arr11 = arr1 * 10 # 所有元素乘以10
arr12 = arr1 > 3 # 判断哪些元素大于3,以True/False显示
arr13 = np.ones((3, 5))
arr14 = np.dot(arr1, arr13) # 矩阵乘法
arr15 = arr1.dot(arr13) # 矩阵乘法
arr16 = arr1.T # 矩阵转置
arr17 = np.transpose(arr1) # 矩阵转置
sample1 = np.random.random((3,2)) #生成3行2列从0到1的随机数
sample2 = np.random.normal(size=(3,2)) #生成3行2列符合标准正态分布的随机数
sample3 = np.random.randint(0,10,size=(3,2)) #生成3行2列从0到10的随机整数
print(np.sum(sample1)) #求和 3.7666557951619426
print(np.min(sample1)) #求最小值 0.14342807815576963
print(np.max(sample1)) #求最大值 0.905760551580983
sum_axis0 = np.sum(sample1, axis=0) #对列求和
sum_axis1 = np.sum(sample1, axis=1) #对行求和
print(np.argmin(sample1)) #求最小值的索引 5
print(np.argmax(sample1)) #求最大值的索引 4
print(np.mean(sample1)) #求平均值 0.6277759658603238
print(sample1.mean()) #求平均值 0.6277759658603238
print(np.median(sample1)) #求中位数 0.7812083521503022
sample1_sqrt = np.sqrt(sample1) # 开方
sample3_sort = np.sort(sample3) # 排序
sample3_clip = np.clip(sample3,2,7) # 小于2就变成2,大于7就变为7
索引
arr1 = np.arange(2,14)
print(arr1) # [ 2 3 4 5 6 7 8 9 10 11 12 13]
print(arr1[2]) #索引是从0开始的,选取第二个位置的数据 4
print(arr1[1:4]) #第一到第四个位置的数据 [3 4 5]
print(arr1[2:-1]) #第二到倒数第一个位置的数据 [ 4 5 6 7 8 9 10 11 12]
print(arr1[:5]) #前五个数据 [2 3 4 5 6]
print(arr1[-2:]) #最后两个数据[12 13]
arr2 = arr1.reshape(3,4)
#[[ 2 3 4 5]
# [ 6 7 8 9]
# [10 11 12 13]]
print(arr2[1]) # [6 7 8 9]
print(arr2[1][1]) # 7
print(arr2[1,2]) # 8
print(arr2[:,2]) # [ 4 8 12]
for i in arr2: #迭代行
print(i)
#[2 3 4 5]
#[6 7 8 9]
#[10 11 12 13]
for i in arr2.T:#迭代列
print(i)
#[ 2 6 10]
#[ 3 7 11]
#[ 4 8 12]
#[ 5 9 13]
for i in arr2.flat:#一个一个元素迭代
print(i)
数组合并
arr1 = np.array([1,2,3])
arr2 = np.array([4,5,6])
arr3 = np.vstack((arr1,arr2))#垂直合并
print(arr3.shape) # (2, 3)
arr4 = np.hstack((arr1,arr2))#水平合并
print(arr4.shape) # (6, )
arr5 = np.vstack((arr1,arr2,arr3))#多个array的合并
arr6 = np.hstack((arr1,arr2,arr4))
#合并的array维度要相同,array形状要匹配
arr7 = np.concatenate((arr1,arr2,arr1))
arr8 = np.concatenate((arr3,arr5),axis=0) # axis=0纵向合并
arr9 = np.concatenate((arr3,arr3),axis=1) # axis=1横向合并
arr1 = np.array([1,2,3]) # [1, 2, 3]
arr2 = arr1.T #一维的array不能转置 [1, 2, 3]
print(arr2.shape) # (3,)
arr3 = arr1[np.newaxis,:] #新增加了一个维度,变成了1行3列
# [[1 2 3]]
print(arr3.shape) # (1, 3)
arr4 = arr3.T
#[[1]
# [2]
# [3]]
arr5 = arr1[:,np.newaxis]
#[[1]
# [2]
# [3]]
print(arr5.shape) # (3, 1)
arr6 = np.atleast_2d(arr1) #自动变成至少两维的 [[1 2 3]]
arr7 = arr6.T
#[[1]
# [2]
# [3]]
数组分割
arr1 = np.arange(12).reshape((3,4))
arr2,arr3 = np.split(arr1,2,axis=1)#水平方向分割,分成2份
arr4,arr5,arr6 = np.split(arr1,3,axis=0)#垂直方向分割,分成3份
arr7,arr8,arr9 = np.array_split(arr1,3,axis=1)#水平方向分割,分成3份,不等分割
arrv1,arrv2,arrv3 = np.vsplit(arr1,3)#垂直分割
arrh1,arrh2 = np.hsplit(arr1,2)#水平分割
深浅拷贝
arr1 = np.array([1,2,3]) # [1, 2, 3]
arr2 = arr1 #arr1,arr2共享一块内存,浅拷贝
arr2[0] = 5
print(arr1) # [5, 2, 3]
print(arr2) # arr1和arr2一起变化 [5, 2, 3]
arr3 = arr1.copy() #深拷贝 [5, 2, 3]
arr3[0] = 10
print(arr1) # [5, 2, 3]
print(arr3) # [10, 2, 3]