1. 程式人生 > 實用技巧 >panda實現自動化表格

panda實現自動化表格

堡壘機訪問記錄

'''
堡壘機訪問記錄自動化
'''

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'