python pandas操作excel表
阿新 • • 發佈:2018-11-28
原始excel表
要轉換成的excel表
程式碼
import pandas as pd class Daletou(object): def __init__(self): # 讀取excel表的哪幾列 self.lie = 'A,B,C,D,E,F' # renpan self.ren_wen_pan = { 1: [1, 11, 13, 25], 2: [2, 10, 14, 26], 3: [3, 9, 15, 27], 4: [4, 8, 16, 28], 5: [5, 7, 17, 29], 6: [6, 6, 18, 30], 7: [7, 5, 19, 31], 8: [8, 4, 20, 32], 9: [9, 3, 21, 33], 10: [10, 2, 22, 34], 11: [11, 1, 23, 35], 0: [12, 12, 24, 36], } # pandas讀取excel檔案 self.data = pd.read_excel('大樂透.xlsx', sheet_name='Sheet1', usecols=self.lie) """ 把讀取到的excel轉換成字典型別: { 21: [8, 6, 5, 15, 9], 22: [33, 19, 10, 35, 2], 23: [13, 18, 29, 12, 21], 24: [32, 2, 16, 30, 24], .... } """ self.data_dict = self.data.set_index('期數').T.to_dict('list') # print(self.data_dict) def parse(self): """ 處理彩票正確率 :return: 返回處理好的字典型別: {'期數':[21,22,23,24], '人文盤1':[1,'','',''], '人文盤2':['','',2,''], '人文盤3':['','',2,''], '人文盤4':['','',2,''], '錯誤率':['','',2,''], } """ rst_dit = {} for i_k, i_v in self.data_dict.items(): test = [] rst_dit[i_k] = [] for j_k, j_v in self.ren_wen_pan.items(): if i_k % 12 == j_k: for ren in self.ren_wen_pan[j_k]: if ren in i_v: test.append(ren) rst_dit[i_k].append(ren) else: rst_dit[i_k].append(' ') if len(test) == 0: rst_dit[i_k].append("%.2f%%" % (1 * 100)) else: rst_dit[i_k].append("%.2f%%" % (len(test) / 4 * 100)) # rst_dit[i_k].append(test) pd_data = { '期數': [], '人文盤1': [], '人文盤2': [], '人文盤3': [], '人文盤4': [], '錯誤率': [], } for i_v, i_k in rst_dit.items(): pd_data['期數'].append(i_v) pd_data['人文盤1'].append(i_k[0]) pd_data['人文盤2'].append(i_k[1]) pd_data['人文盤3'].append(i_k[2]) pd_data['人文盤4'].append(i_k[3]) pd_data['錯誤率'].append(i_k[4]) # print(pd_data) return pd_data def save_excel(self, data_dict): """ 把處理好的字典寫到新的excel裡 :param data_dict: 處理好的字典 :return: """ # 開啟一個新的excel writer = pd.ExcelWriter('大樂透正確率.xlsx') # 把字典轉化為dataframe型別 df = pd.DataFrame(data_dict) # 把轉化好的dataframe寫到剛才開啟的writer裡 df.to_excel(writer, 'Sheet1') # 儲存寫好的excel writer.save() def run(self): self.save_excel(self.parse()) if __name__ == '__main__': data = Daletou() data.run()