panda實現自動化表格
阿新 • • 發佈:2020-10-22
堡壘機訪問記錄
''' 堡壘機訪問記錄自動化 ''' import pandas as pd import numpy as np # 顯示全部列 pd.options.display.max_columns = 999 # 列對齊 pd.set_option('display.unicode.ambiguous_as_wide', True) pd.set_option('display.unicode.east_asian_width', True) # 常量 total = pd.read_excel('/Users/soymilk/微雲同步助手(296672942)/OY/excel_auto/bastion/堡壘機訪問記錄.xlsx') ori_cent_date = pd.read_excel('/Users/soymilk/微雲同步助手(296672942)/OY/excel_auto/bastion/核心資料庫.xlsx') ip_list = ori_cent_date.IP.tolist() center_data = pd.DataFrame() # ---【2】會話大小--- # 轉化單位為KB for x in range(0,len(total)): y = total.iloc[x,12] if 'MB' in y: y = y.replace('MB','') y= float(y) * 1024 y = int(y) y = str(y) + 'KB' total.iloc[x,12] = y elif 'GB' in y: y = y.replace('GB','') y = float(y) * 1024 * 1024 y = int(y) y = str(y) + 'KB' total.iloc[x,12] = y elif 'TB' in y: y = y.replace('TB','') y= float(y) * 1024 * 1024 * 1024 y = int(y) y = str(y) + 'TB' total.iloc[x,12] = y else: y = y total.iloc[x,12] = y # 會話總和 data_size = total['會話大小'].apply(lambda x:x[:-2]) data_size = data_size.astype('int64') data_size_sum = data_size.sum() if 4 <= len(str(data_size_sum)) < 7: data_size_sum = '%.2f' % (data_size_sum / 1024) data_size_sum = str(data_size_sum) + 'MB' elif 7 <= len(str(data_size_sum)) < 10: data_size_sum = '%.2f' % (data_size_sum / 1024 / 1024) data_size_sum = str(data_size_sum) + 'GB' elif 10 <= len(str(data_size_sum)) < 13: data_size_sum = '%.2f' % (data_size_sum / 1024 / 1024 / 1024) data_size_sum = str(data_size_sum) + 'TB' else: data_size_sum = str(data_size_sum) + 'KB' # ---【2】核心資料庫--- # 開局定義空DataFrame,迭代相加 for i in ip_list: center_data = center_data.append(total.loc[total['主機IP']==i]) # ---【3】彙總--- total_sum_data = { '專案':['本週運維次數','核心資料庫傳輸量'], '數值':[len(total.index),data_size_sum] } total_sum = pd.DataFrame(total_sum_data,index=['本週運維次數','核心資料庫傳輸量'],columns=['專案','數值']) # ---【4】儲存匯出excel--- writer = pd.ExcelWriter('/Users/soymilk/微雲同步助手(296672942)/OY/excel_auto/bastion/bastion_finish/堡壘機訪問記錄finish.xlsx') # center_date.set_index('型別') total_sum.to_excel(writer,sheet_name='彙總') total.to_excel(writer,sheet_name='會話大小') center_data.to_excel(writer,sheet_name='核心資料庫') writer.save() print('auto_excle success')
知識點:
讀取excel檔案
total = pd.read_excel('/Users/soymilk/微雲同步助手(296672942)/OY/excel_auto/bastion/堡壘機訪問記錄.xlsx') ori_cent_date = pd.read_excel('/Users/soymilk/微雲同步助手(296672942)/OY/excel_auto/bastion/核心資料庫.xlsx') print(total)
DataFrame轉化為list
ip_list = ori_cent_date.IP.tolist()
迴圈實現迭代相加
ip_list = ori_cent_date.IP.tolist() # 轉化為list好實現迴圈(可能有更好的方法) center_data = pd.DataFrame() # 定義空的DataFrame for i in ip_list: center_data = center_data.append(total.loc[total['主機IP']==i]) print(center_data)
if elif else的運用
for x in range(0,len(total)): y = total.iloc[x,12] # 列的id為12 if 'MB' in y: # 如果y包含字串'MB' y = y.replace('MB','') # 刪除'MB'(將'MB'替換為空字串) y = float(y) * 1024 # 轉化為浮點型乘以1024轉化單位為'KB' y = int(y) # 轉化為整數 y = str(y) + 'KB' # 轉化為字串 並加上字串'KB',形成最終想要的效果 total.iloc[x,12] = y # 將最終的結果賦值給total.iloc[x,12] elif 'GB' in y: y = y.replace('GB','') y = float(y) * 1024 * 1024 y = int(y) y = str(y) + 'KB' total.iloc[x,12] = y elif 'TB' in y: y = y.replace('TB','') y = float(y) * 1024 * 1024 * 1024 y = int(y) y = str(y) + 'TB' total.iloc[x,12] = y else: y = y total.iloc[x,12] = y
會話總和
# 會話總和 data_size = total['會話大小'].apply(lambda x:x[:-2]) # 只從倒數第2位開始取值(不包含倒數第2位) data_size = data_size.astype('int64') # 轉化為整形 data_size_sum = data_size.sum() if 4 <= len(str(data_size_sum)) < 7: data_size_sum = '%.2f' % (data_size_sum / 1024) # 只取小數點後2位 data_size_sum = str(data_size_sum) + 'MB' elif 7 <= len(str(data_size_sum)) < 10: data_size_sum = '%.2f' % (data_size_sum / 1024 / 1024) data_size_sum = str(data_size_sum) + 'GB' elif 10 <= len(str(data_size_sum)) < 13: data_size_sum = '%.2f' % (data_size_sum / 1024 / 1024 / 1024) data_size_sum = str(data_size_sum) + 'TB' else: data_size_sum = str(data_size_sum) + 'KB'