目录

3.2处理文件和文件夹的模块——os

3.2.1获取当前运行的Python代码文件路径

3.2.2列出指定路径下的文件夹包含的文件和文件夹名称

3.2.3分离文件主名和扩展名

3.2.4重命名文件和文件夹

3.3批量处理Excel文件的模块——xlwings

3.3.1创建工作薄

3.3.2保存工作薄

3.3.3打开工作薄

3.3.4操控工作表和单元格

3.4数组计算的数学模块——NumPy

3.4.1数组的基础知识

3.4.2数组的创建

3.5数据导入和整理模块——pandas

3.5.1二维数据表格DataFrame的创建与索引的修改

3.5.2文件读取与写入

3.5.3数据的选取和处理

3.5.4数据表的拼接

3.6模块的交互

3.6.1xlwings模块与pandas模块的交互

3.6.2xlwings模块与Matplotlib模块的交互


3.2处理文件和文件夹的模块——os

3.2.1获取当前运行的Python代码文件路径

import os
path=os.getcwd()
print(path)'''
E:\数据分析师学习\jupyter notebook
'''

3.2.2列出指定路径下的文件夹包含的文件和文件夹名称

import os
path='E:\数据分析师学习\jupyter notebook'  #指定路径
os.listdir(path)  #指定路径下所有文件名

3.2.3分离文件主名和扩展名

import os
path='example.xlsx'
os.path.splitext(path)'''
('example', '.xlsx')
'''

可以看到,splitext()函数返回的是一个包含两个元素的元组,前一个元素是文件名,后一个元素的扩展名:('example', '.xlsx')

3.2.4重命名文件和文件夹

os模块中的rename()函数可以重命名文件和文件夹,该函数的与噶格式如下:

rename(src,dst)

import os
oldname='E:\数据分析师学习\jupyter notebook\Tree.txt'  #该目录下的文件Tree.txt文件
newname='E:\数据分析师学习\jupyter notebook\Tree1.txt'#该改成Tree1.txt文件
os.rename(oldname,newname)

还可以更改改名后文件存储的位置

import os
oldname='E:\数据分析师学习\jupyter notebook\Tree1.txt'  #该目录下的文件Tree1.txt文件
newname='E:\Tree.txt'#更名后保存到另一个文件夹中
os.rename(oldname,newname)

用rename()函数重命名文件夹和重命名文件的方法类似,件文件的路径改为文件夹的路径:

import os
oldname='E:\数据分析师学习\mysql'  #该目录下的文件夹
newname='E:\数据分析师学习\mysql1'#重命名文件夹名
os.rename(oldname,newname)

3.3批量处理Excel文件的模块——xlwings

可以处理Excel文件的Python模块有很多,如XlsxWriter、xlrd、xlwt、xlutils、openpyxl和xlwings等,下表对各模块的功能进行了简单对比。

功能/模块 XlsxWriter xlrd xlwt xlutils openpyxl xlwings
× ×
×
修改 × × ×
支持xls格式 × ×
支持xlsx格式 ×
支持批量操作 × × × × ×

通过上表的对比发现,xlwings模块的功能是最齐全的,它不仅能读、写和修改两种格式的Excel文件(xls和xlsx),而且还能批量处理多个Excel文件。

3.3.1创建工作薄

  • visible用于设置Excel程序窗口的可见性,True为可见,False为隐藏
  • add_book用于设置启动Excel程序窗口是否为新建工作薄,True为新建,False为不新建
  • add()为books对象的函数,用于新建工作薄
import xlwings as xw
app=xw.App(visible=True,add_book=False)
#visible用于设置Excel程序窗口的可见性,True为可见,False为隐藏
#add_book用于设置启动Excel程序窗口是否为新建工作薄,True为新建,False为不新建workbook=app.books.add() #add()为books对象的函数,用于新建工作薄

3.3.2保存工作薄

如果要对上面的文件进行保存,代码如下:

workbook.save(r'C:\Users\Administrator\Desktop\example.xlsx')  #保存到桌面,命名为example.xlsx
workbook.close()  #关闭工作薄
app.quit()  #退出Excel程序

绝对路径:'C:\\Users\\Administrator\\Desktop\\example1.xlsx'就是一个绝对路径,代码也可以写成r'C:\Users\Administrator\Desktop\example.xlsx',代码中的r用来取消路径中反斜杠"\"的转义功能。

相对路径:如果将代码写成workbook.save('.\example1.xlsx')或者workbook.save('example1.xlsx')那么就会在代码文件的文件夹下创建一个名为example1.xlsx的工作薄。

3.3.3打开工作薄

import xlwings as xw
app=xw.App(visible=True,add_book=False)
workbook=app.books.open(r'C:\Users\Administrator\Desktop\example.xlsx')
#打开指定目录下的文件

3.3.4操控工作表和单元格

继3.3.3打开的工作薄进行操作

worksheet=workbook.sheets['Sheet1']  #选中工作表的sheet1表
worksheet.range('A1').value='编号'  #将A1单元格填上编号

如果想新增sheet表,可以进行如下代码:

import xlwings as xw
app=xw.App(visible=True,add_book=False)
workbook=app.books.open(r'C:\Users\Administrator\Desktop\example.xlsx')
#打开指定目录下的文件
worksheet=workbook.sheets.add('产品统计表')

综合应用:

import xlwings as xw
app=xw.App(visible=False) #启动程序,不打开的意思
workbook=app.books.add() #新建表格
worksheet=workbook.sheets.add('产品统计表') #表格中新增‘产品统计表’
worksheet.range('A1').value='编号'  #‘产品统计表中的A1单元格附上编号’
workbook.save(r'C:\Users\Administrator\Desktop\example2.xlsx')  #保存workbook
workbook.close()  #关闭表格
app.quit()  #退出excel 程序

3.4数组计算的数学模块——NumPy

NumPy模块名称是由‘Numerical Python’缩写而来,这个模块是一个运行速度非常快的数学模块,主要用于数组计算。

3.4.1数组的基础知识

import numpy as np
a=[1,2,3,4]
print(a)
print(type(a))b=np.array([1,2,3,4])
print(b)
print(type(b))
[1, 2, 3, 4]  #列表的展现形式
<class 'list'>  #变量a的数据类型是列表[1 2 3 4]  #数组的展现形式
<class 'numpy.ndarray'>   #变量b的数据类型是数组

提取列表和数组中的元素

print(a[1])  #2
print(b[1])  #2
print(a[0:2])  #[1, 2]
print(b[0:2])  #[1 2]

从运行结果可以看出,列表和数组有着相似的元素索引机制,唯一的区别就是数组中的元素用空格隔开,而列表中的元素用逗号隔开。那么NumPy模块为什么不直接使用列表来组织数据,而要引用数组这一新的数据结构呢?原因有很多,这里主要讲两点。

第一,数组能很好地支持一些数学运算,而用列表来完成这些数学运算则较为麻烦:

import numpy as np
a=[1,2,3,4]
b=np.array([1,2,3,4])
a*2  #[1, 2, 3, 4, 1, 2, 3, 4]
b*2  #array([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]][[1 2][3 4][5 6]]

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

3.4.2数组的创建

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

除此之外,还有一些常见的创建数组的方式,以一维数组为例,可以使用np.arange()函数来创建一维数组,该函数的括号里可以输入1-3个参数,会得到不同的效果。

import numpy as np
x=np.arange(5)
print(x)  #[0 1 2 3 4]
y=np.arange(5,10)
print(y)  #[5 6 7 8 9]
z=np.arange(5,10,2)  #以步长为2进行创建
print(z)  #[5 7 9]

还可以用np.random中的函数创建随机一维数组。

#np.random.randn(3) 创建一个一维数组,其中包含服从正态分布的3个随机数
np.random.randn(3) #array([ 0.81622131, -0.68649247,  0.83856553])

reshape()函数可以改变数组的维数

d=np.arange(12).reshape(3,4)'''
[[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11]]
'''

这里再简单介绍一种创建随机整数二维数组的方法

np.random.randint(0,10,(4,4))  #随机创建0-9的4*4的数组'''
array([[5, 2, 1, 6],[4, 9, 9, 2],[7, 1, 2, 0],[0, 9, 4, 7]])
'''

3.5数据导入和整理模块——pandas

pandas模块是基于NumPy模块的一个开源Python模块,广泛应用于完成数据快速分析、数据清洗和准备等工作,它的名字来源于‘panel data’。

与NumPy模块相比,pandas模块擅长处理二维数据,其主要有Series和DataFrame两种数据结构。

Series类似于通过NumPy模块的一维数组,不同的是Series对象不仅包含数值,还包含一组索引。

import pandas as pd
pd.Series(['丁一','王二','张三'])'''
0    丁一
1    王二
2    张三
dtype: object
'''

3.5.1二维数据表格DataFrame的创建与索引的修改

1.DataFrame的创建

DataFrame可以通过列表、字典或二维数组创建,下面分别介绍具体方法:

(1)通过列表创建DataFrame

利用pandas模块中的DataFrame()函数可以基于列表创建DataFrame

import pandas as pd
pd.DataFrame([[1,2],[3,4],[5,6]])'''0    1
0   1   2
1   3   4
2   5   6
'''

之前NumPy创建的二维数组进行比较:

通过比较,DataFrame更像Excel中的二维表格,它有行索引和列索引,注意索引是从0开始的。

我们还可以创建DataFrame自定义索引

pd.DataFrame([[1,2],[3,4],[5,6]],columns=['data','score'],index=['A','B','C'])'''data score
A   1   2
B   3   4
C   5   6
'''

columns用于指定列索引名称,参数index用于指定列索引名称。下面另一种方法:

a=pd.DataFrame()
data=[1,3,5]
score=[2,4,6]
a['data']=data
a['score']=score
a'''data score
0   1   2
1   3   4
2   5   6
'''

(2)通过字典创建:

pd.DataFrame({'data':[1,3,5],'score':[2,4,6]},index=['A','B','C'])'''data  score
A   1   2
B   3   4
C   5   6
'''

如果想以字典的键名作为行索引,可以用from_dict()函数将字典转换成DataFrame,同时设置参数orient的值为‘index’:

pd.DataFrame.from_dict({'data':[1,3,5],'score':[2,4,6]},orient='index')'''0    1   2
data    1   3   5
score   2   4   6
'''

(3)通过二维数组创建DataFrame

a=np.arange(12).reshape(3,4)
pd.DataFrame(a,index=[1,2,3],columns=['A','B','C','D'])'''A    B   C   D
1   0   1   2   3
2   4   5   6   7
3   8   9   10  11
'''

2.DataFrame索引的修改

a=pd.DataFrame([[1,2],[3,4],[5,6]],columns=['date','score'],index=['A','B','C'])
a.index.name='公司'
a'''date score
公司
A   1   2
B   3   4
C   5   6
'''

如果想要重命名索引,可以使用rename()函数,在上述4行代码的第3行代码后面输入如下代码:

a=a.rename(index={'A':'万科','B':'阿里','C':'百度'},columns={'date':'日期','score':'分数'})'''日期 分数
公司
万科  1   2
阿里  3   4
百度  5   6
'''

如果想将行索引转换为常规列,可以用reset_index()函数重置索引

a=a.reset_index()'''公司   日期  分数
0   万科  1   2
1   阿里  3   4
2   百度  5   6
'''

如果想把常规列转换成行索引,例如将‘日期’列转换成行索引:

a.set_index('日期')'''公司  分数
日期
1   万科  2
3   阿里  4
5   百度  6
'''

3.5.2文件读取与写入

1.文件读取

import pandas as pd
data=pd.read_excel(r'C:\Users\Administrator\Desktop\example2.xlsx',sheet_name=0  #用于指定文件名称,也可以是数字,默认0,即第一个工作表,encoding='utf-8' #避免中文乱码,index_col=0 #用于设置索引列)

2.文件写入

import pandas as pd
data=pd.DataFrame([[1,2],[3,4],[5,6]],columns=['A列','B列'])
data.to_excel(r'C:\Users\Administrator\Desktop\example1.xlsx')

参数设置:

  • sheetname用于指定工作表的名称
  • index用于指定是否写入行索引信息,默认为True,即将行索引信息存储在输出文件的第一列,若设置成False,则忽略行索引信息
  • columns用于指定要写入的列
  • encoding用于指定编码方式

3.5.3数据的选取和处理

(1)按列选取数据

#创建数据
a=np.arange(1,10).reshape(3,3)
data=pd.DataFrame(a,columns=['c1','c2','c3'],index=['r1','r2','r3'])'''c1 c2  c3
r1  1   2   3
r2  4   5   6
r3  7   8   9
'''data['c1']
'''
r1    1
r2    4
r3    7
Name: c1, dtype: int32
'''data[['c1']]
'''c1
r1  1
r2  4
r3  7
'''#选取多列
data[['c1','c3']]
'''c1    c3
r1  1   3
r2  4   6
r3  7   9
'''

(2)按行选取数据

data.iloc[1:3]

pandas模块官方推荐使用iloc方法来选取行序号

data.iloc[-1]

除了根据序号选取数据外,还可以使用loc方法根据行名称来选取数据

data.loc[['r1','r3']]

(3)按区块选取数据

data[['c1','c2']][0:2] 或者data[0:2][['c1','c2']]

在实战中选取区块数据时,通常先用iloc方法进行选取行,再选取列,代码如下:

data.iloc[1:3][['c1','c2']]

如果要选取单个数据,该方法更有优势:

data.iloc[0]['c3']

也可以使用iloc和loc方法同时选取行和列

data.loc[['r1','r2'],['c1','c3']]data.iloc[0:2,[0,2]]

loc方法使用字符串作为索引,iloc方法使用数字作为索引。

2.数据的筛选

data[data['c1']>1]  #选择c1列中数据大于0的行

筛选c1列中数字大于1且c2列中数据等于5的行:

data[(data['c1']>1)&(data['c2']==5)] 

3.数据的排序

使用sort_values()函数可以按列对数据进行排序,例如对c2列进行排序

data.sort_values(by='c2',ascending=False) #ascending=False按降序排列'''
c1  c2  c3
r3  7   8   9
r2  4   5   6
r1  1   2   3
'''

使用sort_index()函数可以按行索引进行排序,例如行索引的降序排列:

data.sort_index(ascending=False)'''c1    c2  c3
r3  7   8   9
r2  4   5   6
r1  1   2   3
'''

4.数据的运算

data['c4']=data['c1']+data['c3']

c1列的数据+c3列的数据,生成新列c4

5.数据的删除

使用drop()函数可以删除DataFrame中指定数据,

index用于指定要删除的行

columns用于指定要删除的列

inplace默认值为False,表示该删除操作不改变原DataFrame,而是返回一个执行删除操作后的新DataFrame,如果设置为True,则会直接在原DataFrame中进行删除操作。

c=data.drop(columns='c4')

删除多列数据时,要以列表的形式给出列索引

c=data.drop(columns=['c4','c3'])

如果要改变原来的数据结构,比如之前是3*3的数据结构

data.drop(index=['r1','r3'],inplace=True)

使用以上代码后变成(1,3)的数据结构了。

3.5.4数据表的拼接

pandas模块还提供了一些高级功能,其中数据合并与重塑功能为两个数据表的拼接提供了极大的便利,只要涉及merge() concat() append()函数,其中merge()函数使用的比较多。

import pandas as pd
df1=pd.DataFrame({'公司':['恒盛','创锐','快学'],'分数':[90,95,85]})
df2=pd.DataFrame({'公司':['恒盛','创锐','京西'],'股价':[20,180,30]})

1.merge()函数

pd.merge(df1,df2)

可以看到,merge()函数直接根据相同的列名(‘公司’列)对两个数据表进行了合并,而且默认选取的是两个表共有的列内容(‘恒盛’,‘创锐’)。如果同名的列不止一个,可以通过设置参数on指定按照哪一列进行合并,代码如下:

pd.merge(df1,df2,on='公司')

默认的合并方式其实是取交集(inner连接),即选取两个表共有的内容。如果想取并集(outer连接),即选取两个表所有的内容,可以设置参数how,代码如下:

pd.merge(df1,df2,how='outer')

如果想保留左表(df1)的全部内容,对右表(df2)不太在意的话,用 how='left'

pd.merge(df1,df2,how='left')

反之,对右表保留全部:

pd.merge(df1,df2,how='right')

如果想按照索引进行合并,可以设置参数left_index和 right_index,需要同时使用

pd.merge(df1,df2,left_index=True,right_index=True)

2.concat()函数

concat()函数使用全连接(union all)方式完成拼接,他不需要对齐,而是直接进行合并,既不需要两个表有相同的列和索引,只是把数据整合到一起。因此,该函数没有参数how和on,而是用参数axis指定连接的轴向,该参数默认值为0,指定行方向连接(纵向连接)。

pd.concat([df1,df2],axis=0)

pd.concat([df1,df2],axis=1)

3.append()函数

append()函数可以看成concat()函数的简化版,效果和pd.concat([df1,df2])类似,实现的也是纵向拼接:

df1.append(df2)

append()函数还有一个和列表的append()函数一样的用途——新增元素,代码如下:

df1.append({'公司':'腾飞','分数':'90'},ignore_index=True)

这里一定要设置参数ignore_index=True来忽略原索引,否则会报错。

3.6模块的交互

3.6.1xlwings模块与pandas模块的交互

例如:用pandas模块创建的数据表格,再用xlwings模块将表格写入工作薄中。

import pandas as pd
import xlwings as xw
df=pd.DataFrame([[1,2],[3,4]],columns=['a','b'])app=xw.App(visible=False)
workbook=app.books.add()
worksheet=workbook.sheets.add('新工作表2')worksheet.range('A1').value=dfworkbook.save(r'C:\Users\Administrator\Desktop\example4.xlsx')
workbook.close()
app.quit()

3.6.2xlwings模块与Matplotlib模块的交互

例如用Matplotlib模块绘制图表,再用xlwings写入到excel中

import xlwings as xw
import matplotlib.pyplot as plt
#绘图
figure=plt.figure()
x=[1,2,3,4,5]
y=[2,4,6,8,10]
a=plt.plot(x,y)
#建表
app=xw.App(visible=False)
workbook=app.books.add()
worksheet=workbook.sheets.add('新的工作表')#将绘制的图表写入工作薄中
worksheet.pictures.add(figure,name='图片1',update=True #后续更改图标时,可以只更新图表数据而不更改其位置和大小,left=100  #表示让图表距离左侧边界100像素,top设置距离顶端的参数)
workbook.save(r'C:\Users\Administrator\Desktop\example5.xlsx')
workbook.close()
app.quit()

Python让Excel飞起来—模块相关推荐

  1. 用python让excel 飞起来(数据处理与分析操作)

    本文来自<超简单:用Python让Excel飞起来> Excel能完成一般办公中绝大多数的数据分析工作,但是当数据量大.数据表格多时,可借助Python中功能丰富而强大的第三方模块来提高工 ...

  2. Python让Excel飞起来—批量进行数据分析

    目录 案例01 批量升序排序一个工作簿中的所有工作表 举一反三 批量排序多个工作簿中的数据 案例02 筛选一个工作簿中的所有工作表数据 举一反三 在一个工作簿中筛选单一类别数据 案例03 对多个工作簿 ...

  3. 用python让excel飞起来(第7章 图表操作)

    本文来自<超简单 利用python让excel飞起来> 121 制作柱形图(方法一) 柱形图通常用于直观地对比数据,在实际工作中使用频率很高.在Python中,可使用Matplotlib模 ...

  4. Python让Excel飞起来—批量处理行、列和单元格

    目录 案例01 精确调整多个工作簿的行高和列宽 举一反三 精确调整一个工作簿中所有工作表的行高和列宽 案例02 批量更改多个工作簿的数据格式 举一反三 批量更改多个工作簿的外观格式 案例03 批量替换 ...

  5. 用python让excel飞起来(第5章 单元格操作)

    本文来源于 <超简单用python让Excel飞起来> 在Excel中,行和列都是由一个个单元格组成的.因此,学习完行和列的操作,就需要接着学习单元格的操作.本章将详细介绍如何通过Pyth ...

  6. 用python让excel飞起来(行/列操作)

    本文内容来源于<超简单:用Python让Excel飞起来实战150例> Excel的工作表是由行和列组成的,因此,学习完工作表的操作,就需要接着学习行和列的操作.本章将详细介绍如何使用Py ...

  7. python处理excel之openpyxl模块的使用

    python处理excel之openpyxl模块的使用 from openpyxl import Workbook from openpyxl import load_workbook######## ...

  8. Python操作Excel表格的模块xlrd的简单介绍

    Python操作Excel表格的模块xlrd的简单介绍 处理数据对Python来说,比较容易,操作简单,功能强大,短短几行代码,就可处理大量的数据信息,下面介绍Python处理Excel表格的一个模块 ...

  9. python处理excel文件的模块_python处理Excel文件的几个模块

    在python中简单地处理excel文件,有几个相关的模块,各有千秋,本文将不定时收录. Python Excel网站收集了关于python处理excel文件的各种信息. [注意]使用python处理 ...

最新文章

  1. POJ 3257 DP
  2. buffer cache 深度解析
  3. MapReduce TopK统计加排序
  4. leetcode523 Continuous Subarray Sum
  5. CentOS的改变系统启动级别
  6. 如何在Microwindows中显示图片和安装字体
  7. 学习OpenGL ES之法线贴图
  8. 初踩阿里云效代码管理
  9. php自动生成试卷,基于jQuery的试卷自动排版系统实现代码
  10. openid与商户appid不匹配
  11. 在上海奋斗的五年---从月薪3500到700万 (一个西北真汉子的人生)
  12. APP手机测试-理论
  13. 重拳出击之《JVM》面试官版 (初哥勿看)
  14. 在互联网上,没人知道你是一条狗
  15. 西安交大计算机考研软件工程编程题库(二十四)
  16. Python入门习题大全——人生的不同阶段
  17. python画二元函数的图像(3D)
  18. Java知识总结目录总纲
  19. 王梦君 matlab,那是每个matlab程序都要有function么 “#”这个符号是什么意...
  20. HBASE中的compaction策略,日期分层

热门文章

  1. Redis核心技术与实战-学习笔记(二十九):Redis并发控制
  2. key、keyCode 和 which
  3. 鸿蒙时代的人物有哪些,鸿蒙时代四大创世神兽,龙都是它们的后代,麒麟都排不上号...
  4. 小圆象PDF:图片转pdf在线转换器有哪些?照片怎么变成PDF文件?
  5. element-ui 去掉谷歌浏览器el-input组件或input自动填充账号密码
  6. java ice开发_ice开发流程(一)
  7. 基于Springboot搭建个人博客 (学习笔记)
  8. 【Unity Shader学习笔记】(五)使用鼠标绘制自由多边形(附完整工程源码)
  9. Android插件化:从入门到放弃
  10. Hive常用函数(日期函数,取整函数,字符串操作函数,集合操作函数)