由於博主已經開學了,所以更新會比較慢一點,小夥伴們多多體諒哈,想繼續學習數據分析基礎的小夥伴可以關注博主哦!😄
那麼爲了學習的繼續,我們依然需要那三個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函數的參量可以是字符串,列表,整形,都可。
- …好像沒有其他了。。。。