Python 办公笔记

一、Python基础

1. 基础知识

数组

List列表数据类型

转义符

以下两者等价。第1行代码通过在字符串的前面增加一个字符r来取消转义字符\n的换行功能;第2行代码则是将路径中的“\”改为“\”,“\”也是一个转义字符,它代表一个反斜杠字符“\”。
print(r’d:\number.xlsx’)
print(‘d:\number.xlsx’)

2. 基础函数

(1) print函数

自定义的字符串和变量混合输出
print(f'自定义字符串 {变量}')
多个print换行/不换行输出
# python的print()函数中参数end=’ ‘默认为\n,所以会自动换行,以下两种方式等价
print("abc")
print("abc",end='\n')

# 通过以下方式不换行
print("abc",end="")
print("def")

(2) numpy函数1

数组基础知识

NumPy模块的主要特点就是引入了数组的概念。因为一维数组和列表有相似之处,所以这里借助列表来讲解数组的基本概念。演示代码如下:

 import numpy as np
 a = [1, 2, 3, 4]
 b = np.array([1, 2, 3, 4])  
 	# 创建数组的一种方式,array就是数组的意思
 print(a)  
 	#输出变量a的值
 print(b)  
 	#输出变量b的值
 print(type(a))  
 	#输出变量a的数据类型
 print(type(b))  
 	#输出变量b的数据类型

第3行代码中的array()是NumPy模块中的函数,用于创建数组。运行结果如下:

[1, 2, 3, 4]  
	# 列表的展现形式
[1 2 3 4]  
	# 数组的展现形式
<class 'list'>  
	# 变量a的数据类型为列表
<class 'numpy.ndarray'>  
	# 变量b的数据类型为数组

列表和数组有着相似的元素索引机制,唯一的区别就是数组中的元素用空格分隔,而列表中的元素用逗号分隔。那么NumPy模块为什么不直接使用列表来组织数据,而要引入数组这一新的数据结构呢?原因有很多,这里主要讲两点。
第一,数组能很好地支持一些数学运算,而用列表来完成这些数学运算则较为麻烦。演示代码如下:

import numpy as np
a = [1, 2, 3, 4]
b = np.array([1, 2, 3, 4])
c = a * 2
d = b * 2
print(c)
print(d)

运行结果如下:

[1, 2, 3, 4, 1, 2, 3, 4]
[2 4 6 8]

可以看到,同样是做乘法运算,列表是把元素复制了一遍,而数组则是对每个元素都进行了乘法运算。
第二,数组可以存储多维数据,而列表通常只能存储一维数据。演示代码如下:

import numpy as np
e = [[1, 2], [3, 4], [5, 6]]  # 大列表里嵌套小列表
f = np.array([[1, 2], [3, 4], [5, 6]])  # 创建二维数组的一种方式
print(e)
print(f)

运行结果如下:

[[1, 2], [3, 4], [5, 6]]  
	# 列表e的打印输出结果
[[1 2]
[3 4]
[5 6]]
	# 列表f的打印输出结果

可以看到,列表e虽然包含了3个小列表,但其结构是一维的。而数组f则是3行2列的二维结构,这也是之后要学习的pandas模块的核心概念之一,因为数据处理中经常用到二维数组,即二维的表格结构。


数组的创建
一维数组
np.array()
1 import numpy as np
2 # 创建一维数组
3 a = np.array([1, 2, 3, 4])
4 # 创建二维数组
5 b = np.array([[1, 2], [3, 4], [5, 6]])
np.arange()

创建一维数组,该函数的括号里可以输入1~3个参数,会得到不同的效果。演示代码如下:

1 import numpy as np
2 # 1个参数:起点取默认值0,参数值为终点,步长取默认值1,左闭右开
3 x = np.arange(5)
4 # 2个参数:第1个参数为起点,第2个参数为终点,步长取默认值1,左闭右开
5 y = np.arange(5, 10)
6 # 3个参数:第1个参数为起点,第2个参数为终点,第3个参数为步长,左闭右开
7 z = np.arange(5, 10, 2)
8 print(x)
9 print(y)
10 print(z)

运行结果如下:

[0 1 2 3 4]
[5 6 7 8 9]
[5 7 9]
np.random()

创建随机一维数组。
例如,用np.random.randn(3)创建一个一维数组,其中包含服从正态分布(均值为0、标准差为1的分布)的3个随机数。演示代码如下:

1 import numpy as np
2 c = np.random.randn(3)
3 print(c)

运行结果如下:

1 [-0.59243327  0.53587119  0.15330862]
二维数组
np.arange()+reshape()

例如,将包含0~11这12个整数的一维数组转换成3行4列的二维数组,演示代码如下:

1 import numpy as np
2 d = np.arange(12).reshape(3, 4)
3 print(d)

运行结果如下:

1 [[ 0  1  2  3]
2  [ 4  5  6  7]
3  [ 8  9 10 11]]
np.random.randint()
1 import numpy as np
2 e = np.random.randint(0, 10, (4, 4))
3 print(e)

括号里第1个参数0为起始数,第2个参数10为终止数,第3个参数(4,4)则表示创建一个4行4列的二维数组。运行结果如下:

1 [[4 1 6 3]
2  [3 0 4 8]
3  [7 8 1 8]
4  [4 6 3 6]]

二、数学计算

开根号、平方等

math→sqrt函数

import math
x= math.sqrt(9)

pow函数

x= pow(90.5)
#这个函数不需要math,逗号后是上标

**表示幂运算

x= 2**3
x=pow(2,3)
#x=2*2*2

计算点积2

点积
点积

import numpy as np

""" 构建向量"""
a=np.array([-2,2])
b=np.array([2,2])
# numpy.array(object, dtype=None)
#object:创建的数组的对象,可以为单个值,列表,元胞等。
#dtype:创建数组中的数据类型。

""" 计算点积"""
ab_1=np.inner(a,b) # =a1*b1+a2*b2
# np.inner()计算两个数组的内积

""" 根据夹角余弦计算点积 """
ab_2=np.linalg.norm(a)*np.linalg.norm(b)*np.cos(np.pi/2)
# np.lingalg.norm 用法见https://blog.csdn.net/silent1cat/article/details/120811844
#np.cos()必须用弧度形式
#np.pi表示圆周率π



三、Excel数据读取基础操作

批量处理excel文件的模块对比

1. xlwings1

(1) 创建工作簿

	import xlwings as xw
		# 导入xlwings模块并简写为xw
	app = xw.App(visible = True, add_book = False)
		# 启动Excel程序窗口,但不新建工作簿
		# App()是xlwings模块中的函数,该函数有两个常用参数:参数visible用于设置Excel程序窗口的可见性,如果为True,表示显示Excel程序窗口,如果为False,表示隐藏Excel程序窗口;参数add_book用于设置启动Excel程序窗口后是否新建工作簿,如果为True,表示新建一个工作簿,如果为False,表示不新建工作簿。
	workbook = app.books.add()	
		# 新建一个工作簿。其中的add()为books对象的函数,用于新建工作簿

(2) 保存工作簿

	workbook.save('d:\\example.xlsx')
	workbook.close()  
		# 关闭工作簿
	app.quit()  
		# 退出Excel程序

(3) 打开工作簿

	import xlwings as xw
	app = xw.App(visible = True, add_book = False)
	workbook = app.books.open(r'd:\example.xlsx')  
		# 打开D盘根文件夹下名为“example.xlsx”的工作簿
		# 需要注意的是,指定的工作簿必须真实存在,并且不能处于已打开的状态

(4) 操控工作表和单元格

xlwings模块还能操控工作表和单元格。

  import xlwings as xw
  app = xw.App(visible = False)
  workbook = app.books.add()
  worksheet = workbook.sheets.add('产品统计表')
  	# 新增一个名为“产品统计表”的工作表
  worksheet = workbook.sheets['产品统计表] 
  	# 选中工作表“产品统计表”
  worksheet.range('A1').value = '编号'
  	# 在单元格A1中输入内容
   workbook.save(r'd:\北京.xlsx')
  workbook.close()
  app.quit()

运行后会看到在D盘的根文件夹下新建了一个名为“北京.xlsx”的工作簿,该工作簿中有一个名为“产品统计表”的工作表,该工作表的单元格A1中输入了内容“编号”。

2. xlrd

(1)引入Excel库的xlrd

xlrd是Python处理Excel表格数据的一个模块,他可以对Excel数据进行读取,包括:
1、读取Excel的行数、列数、行的值、列的值、
2、读取单元格的值、数据类型
3、增加、删除、修改表格数据
4、导出导入工作表等
xlrd的安装比较简单,只要打开cmd命令框,然后输入:pip install xlrd即可,或者打开编译器jupyter book,然后在代码栏里输入:pip install xlrd也可以安装,然后在代码栏里输入如下代码查看是否安装成功(能看到版本号即表示安装成功)

	import xlrd

(2)打开excel表格[xlrd.open_workbook() ]

	myworkbook = xlrd.open_workbook(r'C:\Users\win7\Desktop\test.xlsx') 
        # myworkbook代表打开的文件,可以任意命名
        # xlrd.open_workbook() 括号内填写文件路径 
        # 如果路径或者文件名有中文给前面加一个r表示原生字符'
	print(f"workbook is {myworkbook}")       
        # 结果:<xlrd.book.Book object at .....>

显示结果为

	workbook is <xlrd.book.Book object at 0x0000000007D33FD0>

(3)获取sheet信息

个数[.nsheets]
	print(f"一共有{myworkbook.nsheets}个sheets")
        # nsheets:获取工作簿中sheet的数量

​显示的结果为

	一共有3个sheets
名称[.sheet_names() ]
	sheet_names = myworkbook.sheet_names()  
        # 定义的sheet = myworkbook.sheet_names()
	print(f"sheet包含{sheet_names}")
        # 结果:['表1', '表2'...]

显示的结果为

	sheet包含['00', '01', '02']
	[<xlrd.sheet.Sheet object at 0x0000000007D33160>, <xlrd.sheet.Sheet object at 0x0000000007D34EF0>, <xlrd.sheet.Sheet object at 0x0000000007D34F98>]
对象[.sheets()]
	sheets_object = myworkbook.sheets()
        # 获取所有的sheet对象,以列表形式显示
        # 定义的sheet对象=文件名.sheets()
	print(f"所有的sheet对象为{sheets_object}") 
        # 结果:[<xlrd.sheet.Sheet object at ……>,……]

显示结果为

	所有的sheet对象为[<xlrd.sheet.Sheet object at 0x0000000007D33160>, <xlrd.sheet.Sheet object at 0x0000000007D34EF0>, <xlrd.sheet.Sheet object at 0x0000000007D34F98>]
获取某个sheet对象
通过索引获取[.sheet()[] ]
	sheets_object = myworkbook.sheets()[0]
		#sheet对象自定义命名=文件名.sheet()[第几个sheet(0是第一个)]
		#没有中括号就是输出所有对象
		#索引从0开始,对应sheet1、sheet2、sheet3……
	print(f"第一个sheet对象为{sheets_object}")    

显示结果为

 	第一个sheet对象为<xlrd.sheet.Sheet object at 0x0000000007D33160>
通过索引获取[.sheet_by_index() ]
	sheet1_object = myworkbook.sheet_by_index(1)
        #sheet对象=文件名.sheet_by_index(第几个sheet,0是第一个)]
        #没有中括号就是输出所有对象
	print(f"通过index获取第2个sheet对象是{sheet1_object}")

显示结果为

	通过index获取第2个sheet对象是<xlrd.sheet.Sheet object at 0x0000000007D34EF0>
通过name获取[.sheet_by_name(sheet_name=" ")]
	sheet1_object = myworkbook.sheet_by_name(sheet_name="00")
        #sheet对象=文件名.sheet_by_name(sheetname="sheet名")]
	print(f"通过name获取第一个sheet对象是{sheet1_object}") 

显示结果为

	通过name获取第一个sheet对象是<xlrd.sheet.Sheet object at 0x0000000007D33160>
判断是否导入成功
通过index判断[.sheet_loaded((sheet_name_or_index= )]
	sheet1_is_load = myworkbook.sheet_loaded(sheet_name_or_index=0)
        #文件名.sheet_loaded(sheet_name_or_index=... )
	print(sheet1_is_load)
        #返回值为布尔类型,True 表示已导入,False 表示未导入
通过名称判断[.sheet.loaded((sheet_name_or_index= )]
	sheet1_is_load = myworkbook.sheet_loaded(sheet_name_or_index="00")
	print(sheet1_is_load)    # 结果:True

(4) 对sheet对象中的行、列执行操作

AB
115
224
333
442
551
获取有效行\列数[.nrows、.ncols]
	nrows = sheet1_object.nrows
	ncols = sheet1_object.ncols
	print(f"sheet1中的有效行数为{nrows}") 
	print(f"sheet1中的有效列数为{ncols}")  
	print(f"sheet1中的数据范围为{nrows}*{ncols}")

显示结果为

	sheet1中的有效行数为5
	sheet1中的有效列数为2
	sheet1中的数据范围为5*2
获取某一行/列数据
获取某一行[类型:数值,类型:数值],[ .row() ]
	print(sheet1_object.row(0))

显示结果为

	[number:1.0, number:5.0]
获取某一列[类型:数值,类型:数值],[ .col() ]
	print(sheet1_object.col(0))

显示结果为

	[number:1.0, number:2.0, number:3.0, number:4.0, number:5.0]
获取第1行[类型:‘数值’,类型:‘数值’],[ row_slice() ]
	print(sheet1_object.row_slice(0))
获取第3行数据,[ .row_values(rowx= ) ]
	all_row_values = sheet1_object.row_values(rowx=2)
	print(f"sheet1中第3行的数据为{all_row_values}")  

显示结果为

	sheet1中第3行的数据为[3.0, 3.0]
获取第2列数据,[.col_values(colx= )]
	all_col_values = sheet1_object.col_values(colx=1)
	print( all_col_values)

显示结果为

	​[5.0, 4.0, 3.0, 2.0, 1.0]
获取第2行、第2列至第4列数据,[.row_values(rowx= , start_colx= , end_colx= )]
	row_values = sheet1_object.row_values(rowx=2, start_colx=1, end_colx=3)
	print(row_values)    

显示结果为

	[3.0]
获取第3行单元对象
	row_object = sheet1_object.row(rowx=2)
	print(f"sheet1中第3行的单元对象为{row_object}")      
 
	row_slice = sheet1_object.row_slice(rowx=2)
	print(f"sheet1中第3行的单元为{row_slice}")      
获取第3行单元类型[.row_types(rowx= )]
	row_types = sheet1_object.row_types(rowx=2)
	print(f"sheet1中第3行的单元类型为{row_types}")   
获取第3行的长度[.row_len(rowx= )]
	row_len = sheet1_object.row_len(rowx=2)
	print(f"sheet1中第3行的长度为{row_len}")   
获取第2列的单元
	col_slice = sheet1_object.col_slice(colx=1)
	print(f"sheet1中第2列的单元为{col_slice}")  
获取单元格信息
获取第2列单元类型[.col_types(colx=1)]
	col_types = sheet1_object.col_types(colx=1)
	print(f"sheet1中第2列的单元类型为{col_types}")      # 结果:[1, 1, 1, 1, 1]
		#单元类型:empty为0,string为1,number为2,date为3,boolean为4,error为5
获取第1行第2列单元对象[.cell(rowx=,colx= )]
	cell_info = sheet1_object.cell(rowx=1, colx=1)
	print(cell_info)      # 结果: text:'m'
	print(type(cell_info))   # 结果:<class 'xlrd.sheet.Cell'>
获取第1行第1列单元值[.cell_value(rowx=,colx=)]
	cell_value = sheet1_object.cell_value(rowx=0, colx=0)
	print(f"sheet1中第rowx=1行,第colx=1列的单元值为{cell_value}")      # 结果: m
获取第1行第1列单元类型值[.cell_type(rowx= ,colx= )]
	cell_type = sheet1_object.cell_type(rowx=0, colx=0)
	print(f"sheet1中第rowx=1行,第colx=1列的单元类型值为{cell_type}。单元类型:empty为0,string为1,number为2,date为3,boolean为4,error为5")  

  1. 《超简单:用Python让Excel飞起来》王秀文 / 郭明鑫 / 王宇韬,机械工业出版社 ↩︎ ↩︎

  2. https://blog.csdn.net/Nismilesucc/article/details/112986830 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值