由于博主已经开学了,所以更新会比较慢一点,小伙伴们多多体谅哈,想继续学习数据分析基础的小伙伴可以关注博主哦!😄
那么为了学习的继续,我们依然需要那三个excel文件,这个我们可以去一个地址下载:传送门
当然由于是外网github社区所以会比较慢,但是文件本身并没有特别大,所以小伙伴只需要等待片刻即可
文件:
今天我们的重点放在对excel文件处理的列处理上。
这里博主也特别生命一点,excel从某种形式上来说是csv文件的一种,所以很多操作其实是类似于前面博主所发布的csv文件的处理博客,也因此,博主在excel模块会更多的倾向于对一些函数的其他用法或其他内容
使用列索引值
基础python
代码:
#excel文件对列的操作
from datetime import date
from xlrd import open_workbook,xldate_as_tuple
from xlwt import Workbook
input_file="sales_2013.xlsx"
output_file="output.xlsx"
out_workbook=Workbook()#创建操作对象
out_worksheet=out_workbook.add_sheet("jan_2013_output")
my_columns=[1,4]
with open_workbook(input_file) as workbook:
worksheet=workbook.sheet_by_name("january_2013")
data=[]
for row in range(worksheet.nrows):
row_list=[]
for column in my_columns:
cell_value=worksheet.cell_value(row,column)
if worksheet.cell_type(row,column)==3 :
date_cell=xldate_as_tuple(cell_value,workbook.datemode)
date_cell=date(*date_cell[0:3]).strftime("%m/%d/%Y")
row_list.append(date_cell)
else:
row_list.append(cell_value)
data.append(row_list)
for list_index,out_list in enumerate(data):
for element_index,element in enumerate(out_list):
out_worksheet.write(list_index,element_index,element)
out_workbook.save(output_file)
我们可以看到代码与当时处理csv文件时大同小异,实际两者差距并不大。我们处理excel时只多了:
- 对时间格式的处理
- 按行列索引一个个写入元素
- 对模块的引入不同
所以思维方面已经不需要多说了。
这里博主提醒小伙伴们,一定要注意这里的workbook.datemode,这里是不能带括号的,否则会报错 ‘int’ object is not callable 也就是对象不可调用,如果大家的代码报错是“某某模块没有某某函数”,那么小伙伴们很有可能是代码中的worksheet与workbook引用户问题了。
strftime 是datetime模块中的函数,作用是将时间格式化。
代码的最后要记得out_workbook.save(output_file) 如果没有参数的话,你的对象便没有地方保存了。
利用pandas
import pandas as pd
input_file="sales_2013.xlsx"
output_file="output.xlsx"
data_frame=pd.read_excel(input_file,"january_2013",index_col=None)
data_frame_column_by_index=data_frame.iloc[:,[1,4]]
writer=pd.ExcelWriter(output_file)
data_frame_column_by_index.to_excel(writer,sheet_name="jan_2013_out",index=False)
writer.save()
有一说一,这真的简单吗,但是如果我们真的要依靠pandas模块的话,小伙伴们需要记忆很多的参数,这一点真的很烦,但是Many skills do not press the body(技多不压身)嘛,是不是。
iloc函数:在csv文件讲过两次,这里的i是 integer 的意思,也就是说他的参数时整形,前参量为行索引,后参量为列索引。
index_col=None:也讲过:重新设置一列为索引,但有小伙伴不理解,ok
传送门大家可以去这里看详解。
index=False:结果不显示索引。
选取列标题
基础python
代码:
#选取列标题,excel文件处理
from datetime import date
from xlrd import open_workbook,xldate_as_tuple
from xlwt import Workbook
input_file="sales_2013.xlsx"
out_file="output.xlsx"
out_workbook=Workbook()#创建对象
out_worksheet=out_workbook.add_sheet("jan_2013_out")
my_columns=["Customer Name"]
with open_workbook(input_file) as workbook:
worksheet=workbook.sheet_by_name("january_2013")
headerlist=worksheet.row_values(0)
data=[my_columns]
header_index_list=[]
for index in range(len(headerlist)):
if headerlist[index] in my_columns:
header_index_list.append(index)
for row in range(1,worksheet.nrows):
row_list=[]
for column in header_index_list:
row_list.append(worksheet.cell_value(row,column))
data.append(row_list)
for list_index,out_list in enumerate(data):
for element_index,element in enumerate(out_list):
out_worksheet.write(list_index,element_index,element)
out_workbook.save(out_file)
那么小伙伴们应该能发现博主偷懒了😄因为现在已经凌晨三点了,博主有点累了,不过这,并!不!影响!博客的质量。
那么这里我们只选取了一列,就避免了对时间的格式化,因为时间的格式化博主已经说过很多遍了,再讲下去是在毫无意义,而且我相信小伙伴们也都能掌握。代码本身并不难,小伙伴们只要专心看都能看懂的。
利用pandas
import pandas as pd
input_file="sales_2013.xlsx"
out_file="output.xlsx"
data_frame=pd.read_excel(input_file,"january_2013",index_col=None)
data_frame_select=date_frame.loc[:,["属性分类名"]]
writer=pd.ExcelWriter(out_file)
data_frame_select.to_excel(writer,sheet_name="jan_2013_out",index=False)
writer.save()
重点:
- loc 函数,博主之前也讲过,iloc函数的参量为整形,而loc函数就不一样了,他的用法更广,当然在实现目的上是与iloc函数差不多的,但是loc函数的参量可以是字符串,列表,整形,都可。
- …好像没有其他了。。。。