2019-10-17用BOM表介紹—好用的Python,便捷的pandas

? ? ?? 好用的Python妆距,便捷的Pandas穷遂,在數(shù)據(jù)計算和分析中其強大的功能堪比數(shù)據(jù)庫的存在,操作卻如同Excel般易于上手毅厚。他比Excel塞颁、Word浦箱、PPT使用VBA更能提升辦公自動化程度吸耿,也更讓人有發(fā)展和想象的空間!人類科技的進步酷窥,在開源這個共享智慧的時代里咽安,一日千里。

? ? ? 這么好的東西蓬推,因為各種原因妆棒,如教材的高不可攀,或案例脫離應用場景沸伏,常常將人拒之門外糕珊,或者枯躁得讓人無法堅持學習下去。

? ? ? 作為數(shù)據(jù)分析的擁躉毅糟,有義務也有責任將這么好的技術和工具推薦給大家红选。接下來的日子里,將會和大家一起來學習Python這個語言姆另,我們使用Spyder這個Python開發(fā)環(huán)境喇肋,[參考資料https://blog.csdn.net/yusongcan/article/details/77073794]

? ?? 首先我們需要安裝Anaconda坟乾,建議安裝3.7以上的版本,這個啊蝶防,想想看甚侣,有iphone6和iphone 11免費讓你選,你會選哪個间学?[參考資料 https://blog.csdn.net/ITLearnHall/article/details/81708148]

? ? ? 聲明:對于長的參考資料殷费,可以隨便看,不想看的時候可以不看菱鸥,想看的時候再看宗兼,這樣才會走得更遠!還有看教程一定要動手氮采,可以一天選一個主題或一個任務來訓練自己殷绍。欲成強者:動眼、動腦鹊漠、還動手主到!網上看到好的資料,收藏到分類的收藏夾里躯概。網上的文章登钥、電子書和紙質的書都是學習的好幫手和好工具。

? ? ?? 眼見為實娶靡,現(xiàn)在我們就通過一個遞歸函數(shù)和MRP物料需求計劃的計算來看一下我們“好用的Python牧牢,便捷的Pandas”,體驗一下“人生苦短姿锭,我用Python”是何等深情的“告白”吧塔鳍!

? ? ?? 用到的表單釋義,抓住重點呻此,我們盡量符合數(shù)據(jù)庫第三范式轮纫。



進入正題,在Spyder新建一個空白文件焚鲜,復制下列代碼和注釋



# -&- coding: utf-8 -&-

"""

Created on Mon Jul? 8 22:05:32 2019

@author: same3

"""

#引入三個python 包

#pandas:數(shù)據(jù)分析包

import pandas as pd #"as"顧名思義掌唾,即以后可以在程序中以縮寫pd 代表 pandas

#numpy:科學計算包

import numpy? as np

#xlwings:python操作Excel的模塊,最好的Excel操作包之一忿磅,有取代VBA的趨勢

#中文入門學習資料之一: https://www.cnblogs.com/catgatp/p/7875683.html

#英文官方學習網站https://docs.xlwings.org/en/stable/ 建設初學者有空翻翻糯彬,隨便看看就好,不要太深入葱她,因為太無趣

import xlwings as xw

#聲明Excel應用程序撩扒,或直接使用 wb=xw.Book(file) 也可以

#app=xw.App(visible=True,add_book=False) ?

"""

visible

Ture:可見excel

False:不可見excel

add_book

True:打開excel并且新建工作簿

False:不新建工作簿

"""

# display_alerts= False ,禁止Excel彈出提示的對話框

#app.display_alerts=False

#Excel 文件路徑

file = r'D:\VBA\LEARNING_ERP.xlsm' #字符串前面加r览效,是表示其后的字符串不轉義却舀,使用真實字符

#打開Excel工作簿虫几,文件路徑:'D:\VBA\LEARNING_ERP.xlsm' ,可根據(jù)實際設定

wb=xw.Book(file)

wb.app.display_alerts=False

#引用工作簿(workbook)里的工作表(worksheet)

sht_test=wb.sheets['base'] #存放基礎數(shù)據(jù)

sht_view=wb.sheets['view'] #存放計算后的數(shù)據(jù)

'''

引用單元格當前拓展區(qū)域挽拔,注意四周行和列的單元格(黃色部分)為空

工作表(worksheet)引用辆脸,下標從0從始,如sht_test[19,0]螃诅;單元格(range)引用啡氢,下標從1開始,如sht_test.range(20,1)這是python的特例术裸。

RNG1[第20行倘是,第1列]的拓展區(qū)域(綠色部分),即20-45行袭艺,A-C列的區(qū)域,即Bom物料清單

RNG2(藍色部分)搀崭,即Plan產品生產計劃


'''

RNG1= sht_test[19,0].api.currentregion

RNG2= sht_test[19,5].api.currentregion

#命名Excel單元格區(qū)域名稱

RNG1.name='Bom'

RNG2.name='Plan'

'''

Plan及Bom資料導入pandas的DataFrame中

header=1表示單元格區(qū)第一行為列標題行

index=True表示單元格區(qū)第一列為索引列,F(xiàn)alse表示自動索引(從0開始)

'''

dfsz5= sht_test['Plan'].options(pd.DataFrame, header=1,index=True).value

dfsz6 = sht_test['Bom'].options(pd.DataFrame, header=1,index=True).value

'''

連接Plan和Bom猾编,merge橫向(列)連接瘤睹,類似SQL SERVER數(shù)據(jù)庫連接join,

left_index=True,right_index=True表示左右兩個DataFrame以索引列為基準進行連接

how='inner'表示內連接

Bom(bill of material)根據(jù)物料清單(遞歸)計算 MRP 物料需求計劃

第二階開始到最尾階的物料分解,從第一階分解后取得所需數(shù)據(jù)

'''

def eeBom(df4A,df4,df2,CX1):

? ? df5=df4[['CID','PCQT','PROCID']]

? ? df5.rename(columns={'CID':'PID','PCQT':'PQT','PROCID':'PROPID'}, inplace = True)

? ? df5.reset_index(drop=True,inplace = True)

? ? df5.set_index('PID',inplace = True)

? ? df6=pd.merge(df5,df2,left_index=True,right_index=True,how='inner')

? ? if df6.empty :

? ? ? ? return df4A

? ? else:? ? ? ?

? ? ? ? df6['PCQT']=df6['PQT']*df6['CQT']

? ? ? ? df6['PROCID']=df6['PROPID']+'-'+str(CX1+1)

? ? ? ? df6['LEVEL']=CX1+1

? ? ? ? df4A=df4A.append(df6)

? ? ? ? return eeBom(df4A,df6,df2,CX1+1)? ?

#第一階的物料分解答倡,從Plan取得所需數(shù)據(jù)

#首先調動eBom函數(shù)轰传,eBom函數(shù)再調用eeBom,但是eeBom要定義在eBom之前瘪撇,不然會出錯获茬,會顯示找不到eeBom函數(shù)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

def eBom(df1,df2):? ? ? ? ? ? ? ? ?

? ? df3=pd.merge(df1,df2,left_index=True,right_index=True,how='inner')

? ? df3['PCQT']=df3['PQT']*df3['CQT']

? ? df3['PROCID']=df3['PROPID']+'-'+str(1)? ? ? ? ? ? ?

? ? df3['LEVEL']=1

? ? return eeBom(df3,df3,df2,1)

#計算MRP,并按單據(jù)號,物料父項編號排序? ?

dfsz7=eBom(dfsz5,dfsz6).sort_values(by=['PROCID','PID'])

#'FC'列標志物料子項是否為:'F'-尾階(最終件)倔既,'M'-非尾階(中間件)

#全部先標注為'M'

dfsz7['FC']='M'

#獲取Bom表中所有物料父項編號恕曲,取唯一值即可

list1=list(dfsz6.index.unique())

#print(list1)

#對MRP物料需求計劃表中的最終件標識為'F'

dfsz7.loc[~dfsz7['CID'].isin( list1),['FC']]='F'

#就這樣完成啦!超簡潔叉存,有沒有小伙伴們码俩!

print(dfsz7)?

#導出到Excel度帮,首先刪除A:AA列歼捏,把格式也一起刪除,用cells.delete或clear無法刪除格式

sht_view.api.columns('A:AA').delete

sht_view.api.cells.delete

sht_view.clear

#在Excel view表'A1'單元格的擴展位置顯示dfsz5(即:Plan生產計劃表)

sht_view.range(1,1).expand().value =? dfsz5

#在Excel view表'E1'單元格的擴展位置顯示dfsz6(即:Bom物料清單表)

sht_view.range(1,5).expand().value =? dfsz6

#在Excel view表'I1'單元格的擴展位置顯示dfsz7(即:MRP物料需求計劃表)

sht_view.range(1,9).expand().value = dfsz7

#在Excel view表'第4笨篷、8列設置列的顏色瞳秽,便于在Excel中區(qū)分各個計算出來的數(shù)據(jù)集

sht_view.cells.columns(4).color=(255,128,255)

sht_view.cells.columns(8).color=(255,128,255)

#列自動調整寬度,如果要指定列寬可用 sht_view.range((1,1),(1,20)).api.ColumnWidth = 8

sht_view.api.columns('A:AA').autofit



結果如下:


? ? ? 看不明白的小伙伴們不要著急率翅,今天只是展示了Python強大功能的一角练俐,接下來的日子里,我們就一起共同來學習和進步吧冕臭!

? ? ? 工作之余要學習腺晾,學習之余要分享燕锥。平時只是看別人寫,現(xiàn)在自己寫一寫悯蝉,才知道其中需要巨大的努力归形,所謂的臺上一分鐘,臺下十年功鼻由,誠不欺人也暇榴!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蕉世,隨后出現(xiàn)的幾起案子蔼紧,更是在濱河造成了極大的恐慌,老刑警劉巖狠轻,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奸例,死亡現(xiàn)場離奇詭異,居然都是意外死亡向楼,警方通過查閱死者的電腦和手機哩至,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜜自,“玉大人菩貌,你說我怎么就攤上這事≈剀” “怎么了箭阶?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長戈鲁。 經常有香客問我仇参,道長,這世上最難降的妖魔是什么婆殿? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任诈乒,我火速辦了婚禮,結果婚禮上婆芦,老公的妹妹穿的比我還像新娘怕磨。我一直安慰自己,他們只是感情好消约,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布肠鲫。 她就那樣靜靜地躺著,像睡著了一般或粮。 火紅的嫁衣襯著肌膚如雪导饲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音渣锦,去河邊找鬼硝岗。 笑死,一個胖子當著我的面吹牛袋毙,可吹牛的內容都是我干的辈讶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼娄猫,長吁一口氣:“原來是場噩夢啊……” “哼贱除!你這毒婦竟也來了?” 一聲冷哼從身側響起媳溺,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤月幌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后悬蔽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扯躺,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年蝎困,在試婚紗的時候發(fā)現(xiàn)自己被綠了录语。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡禾乘,死狀恐怖澎埠,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情始藕,我是刑警寧澤蒲稳,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站伍派,受9級特大地震影響江耀,放射性物質發(fā)生泄漏诉植。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扩借。 院中可真熱鬧,春花似錦领斥、人聲如沸月洛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捧搞,卻和暖如春胎撇,著一層夾襖步出監(jiān)牢的瞬間晚树,已是汗流浹背雅采。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工纲堵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留席函,地道東北人茂附。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像蒂阱,于是被迫代替她去往敵國和親录煤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354