<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
1.載入資料夾內所有的Excel資料;
2.生產貢獻度分析圖表(以柱狀圖顯示錶格資料);
3.提起Excel表格中指定列資料;
4.定向篩選所需資料;
5.多表資料統計排行;
6.多表資料合併新excel檔案。
Anaconda3,在conda 中,window和ubuntu中的python功能一樣 。
pycharm。
這些依賴包 都要裝好
import os import xlrd2 #xlrd: 對Excel進行讀相關操作 import xlwt #xlwt: 對Excel進行寫相關操作,且只能建立一個全新的Excel然後進行寫入和儲存。 import numpy import matplotlib from prettytable import PrettyTable #PrettyTable 是python中的一個第三方庫,可用來生成美觀的ASCII格式的表格 from matplotlib import pyplot as plt
Excel資料分析師的主函數main(),主要用於實現系統的主介面。在主函數main()中,首先呼叫get_files_name()函數獲取檔名。
get_files_name()函數程式碼如下:
#匯入檔案 def get_files_name(): """ 用於獲取檔名 :return: 返回值為檔名組成的列表 """ file_list = os.listdir('./data') return file_list
然後呼叫load_data()函數來讀取excel檔案並字典方式儲存。
#儲存生產excel表 def load_data(file_list): """ 用於讀取指定的檔案並儲存至字典資料結構中 :param file_list: 需要載入的檔案列表 :return: 儲存了檔案內容的字典 """ dictory = {} for file in file_list: # 獲取表格檔案 book = xlrd2.open_workbook('./data/'+file) # 獲取表格中的所有sheet names = book.sheet_names() # 獲取第一個sheet sheet = book.sheet_by_index(0) # 獲取當前表格的行數 rows = sheet.nrows # 獲取當前表格的列數 cols = sheet.ncols # 獲取表標頭檔案,即表格第一行 head = sheet.row_values(0) for row in range(rows-1): # 如果當前字典中沒有該城市則建立一個 if not sheet.cell_value(row+1, 0) in dictory.keys(): dictory[sheet.cell_value(row+1, 0)] = {} for col in range(cols-1): dictory[sheet.cell_value(row+1, 0)][head[col+1]] = float(sheet.cell_value(row+1, col+1)) return dictory
接著呼叫menu()函數生成功能選擇選單。
menu()函數程式碼如下:
# 列印選單 def menu(): print(" ----------Excel 資料分析師----------") print("{:<30}".format(" ==============功能選單============== ")) print("{:<30}".format(" 1. 顯示當前資料 ")) print("{:<30}".format(" 2. 以柱狀圖展示當前資料 ")) print("{:<30}".format(" 3. 提起指定列 ")) print("{:<30}".format(" 4. 定向篩選指定元素 ")) print("{:<30}".format(" 5. 資料排行 ")) print("{:<30}".format(" 6. 重新載入資料 ")) print("{:<30}".format(" 7. 儲存當前資料 ")) print("{:<30}".format(" 0. 退出程式 ")) print("{:<30}".format(" ==================================== ")) print("{:<30}".format(" 說明:輸入相應數位後按下回車選擇指定功能 ")) print('n')
並且應用if語句控制各個子函數的呼叫,從而實現對Excel檔案的選擇,Excel資料的載入,選擇、篩選、合併、排序和統計等功能。
主函數完整程式碼如下:
if __name__ == "__main__": # 匯入檔案 files = get_files_name() data = {} print("當前data資料夾下的檔案如下:") num = 1 for file in files: print(num, file) num += 1 while(1): index_str = input("請選擇需要匯入的檔案序號(多個檔案匯入時用空格分開, 輸入0則匯入所有檔案,輸入多檔案則自動合併):") index_list = index_str.split(' ') try: index_list.remove('') except: pass choice_file_list = [] if index_list[0] == '0': choice_file_list = files break else: try: for item in index_list: choice_file_list.append(files[int(item)-1]) except: print("輸入序號有誤") continue if choice_file_list: break else: print("輸入序號有誤") data = load_data(choice_file_list) print("匯入資料成功n") # 呼叫函數,列印選單 menu() while 1: choice = input("請選擇指定功能:") if choice == '0': print("n退出程式n") exit() elif choice == '1': print("當前功能:顯示當前資料") show_data(data) input('n按下回車返回選單') menu() elif choice == '2': print("當前功能:以柱狀圖顯示資料") draw_plot(data) input('n按下回車返回選單') menu() elif choice == '3': print("當前功能:篩選指定列") keys = list(data[list(data.keys())[0]].keys()) print("當前表格中的列如下:") num = 1 for key in keys: print(num, key) num += 1 choice_col_list = [] while (1): index_str = input("請選擇需要篩選出的列序號(多列之間用空格分開,0代表所有列):") index_list = index_str.split(' ') try: index_list.remove('') except: pass choice_file_list = [] if index_list[0] == '0': choice_col_list = keys break else: try: for item in index_list: choice_col_list.append(keys[int(item) - 1]) except: print("輸入序號有誤") continue if choice_col_list: break else: print("輸入序號有誤") data = get_specified_cols(data, choice_col_list) print("篩選成功") input('n按下回車返回選單') menu() elif choice == '4': print("當前功能:篩選指定行") keys = list(data[list(data.keys())[0]].keys()) print("當前表格中的列如下:") num = 1 print(num, "城市") num += 1 for key in keys: print(num, key) num += 1 col = int(input("請輸入需要進行篩選的資料所在的列:"))-2 if col == -1: col = '城市' else: col = keys[col] op_list = ['<', '<=', '=', '>=', '>'] print("比較操作符如下:") num = 1 for op in op_list: print(num, op) num += 1 operation = int(input("請輸入比較操作符前的序號:"))-1 operation = op_list[operation] value = input("請輸入需要篩選的值:") data = get_specified_data(data, operation, col, value) print("篩選成功") input('n按下回車返回選單') menu() elif choice == '5': print("當前功能:資料排序") keys = list(data[list(data.keys())[0]].keys()) print("當前表格中的列如下:") num = 1 for key in keys: print(num, key) #顯示當前表格中的所有的列 num += 1 col = int(input("請輸入需要進行排序的資料所在的列:")) - 1 col = keys[col] reverse = input("排序方式:n1 從大到小排序n2 從小到大排序n") if reverse == '1': data = sort_data(data, col, True) elif reverse == '2': data = sort_data(data, col, False) else: print("輸入有誤") input('n按下回車返回選單') menu() elif choice == '6': # 匯入檔案 files = get_files_name() data = {} print("當前資料夾下的檔案如下:") num = 1 for file in files: print(num, file) num += 1 while (1): index_str = input("請選擇需要匯入的檔案序號(多個檔案匯入時用空格分開, 輸入0則匯入所有檔案,輸入多檔案則自動合併):") index_list = index_str.split(' ') try: index_list.remove('') except: pass choice_file_list = [] if index_list[0] == '0': choice_file_list = files break else: try: for item in index_list: choice_file_list.append(files[int(item) - 1]) except: print("輸入序號有誤") continue if choice_file_list: break else: print("輸入序號有誤") data = load_data(choice_file_list) print("匯入資料成功n") # 列印選單 menu() elif choice == '7': print("當前功能:儲存資料") save(data) input('n按下回車返回選單') menu() else: print("請輸入正確的數位") input('n按下回車返回選單') menu()
載入資料夾內所有的Excel資料
show_data()函數通過PrettyTable 庫(PrettyTable 庫是python中的一個第三方庫,可用來生成美觀的ASCII格式的表格)將之前儲存的字典資料生成表格。
#載入顯示資料 def show_data(dictory): try: keys = list(dictory[list(dictory.keys())[0]].keys()) except: print("當前資料為空") return head = ['城市'] head.extend(keys) table = PrettyTable(head) for key in dictory.keys(): line = [key] for key_2 in keys: line.append(dictory[key][key_2]) table.add_row(line) print(table)
效果圖如下:
生產貢獻度分析圖表(以柱狀圖顯示錶格資料)
draw_plot( )函數使用了matplotlib庫。通過atplotlib.rc( )來設定字型,通過plt.bar( )函數來繪製柱狀圖,通過plt.legend( )函數來給圖新增圖例。
#製作圖表 def draw_plot(dictory): font = {'family': 'MicroSoft Yahei', 'weight': 'bold', 'size': 7} matplotlib.rc('font', **font) #設定中文字型 # 定義三個顏色 index = numpy.arange(len(dictory.keys())) color = [(256 / 256, 0 / 256, 0 / 256, 1), (0 / 256, 0 / 256, 256 / 256, 1), (0 / 256, 256 / 256, 0 / 256, 1), (0 / 256, 0 / 256, 0 / 256, 1)] first_key = list(dictory.keys()) first_key = first_key[0] cols = list(dictory[first_key].keys()) data = [] for i in range(len(cols)): data.append([]) for key in dictory.keys(): for col in range(len(cols)): data[col].append(dictory[key][cols[col]]) offset = -1/4 for i in range(len(cols)): plt.bar(index+offset, data[i], color=color[i], width=1 / 5) #通過bar函數可以用柱狀圖來表達一些變數的統計分佈 offset += 1/4 plt.xticks(index, dictory.keys())#表示刻度 plt.legend(cols)#給影象加上圖例 plt.show()
效果圖
提起Excel表格中指定列資料
get_specified_cols()函數根據使用者在選單輸入的列名,通過字典的索引篩選出列名,載入指定列的所有資料。
#提起指定列 def get_specified_cols(dictory, col_name_list): """ 篩選出指定的列 :param dictory:原始字典 :param col_name_list: 需要篩選出的列名,城市名預設出現 :return: 篩選之後的字典 """ new_dict = {} for key in dictory.keys(): new_dict[key] = {} for col_name in col_name_list: new_dict[key][col_name] = dictory[key][col_name] return new_dict
效果圖如下:
到此這篇關於詳解Python如何實現Excel資料讀取和寫入的文章就介紹到這了,更多相關Python Excel資料讀寫內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45