1. 程式人生 > >python pandas操作excel表

python pandas操作excel表

原始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()