#-&- coding: utf-8 -&-
"""
Createdon Mon Jul? 8 22:05:32 2019
@author:
same3
"""
我們通過(guò)Xlwings 調(diào)用 Excel特定區(qū)域的數(shù)據(jù)集,將用來(lái)測(cè)試Panda對(duì)于None值/NaN/null/空值(以下統(tǒng)稱(chēng)空值)的處理,本次我們將會(huì)學(xué)到:
利用Xlwings從Excel特定區(qū)域讀入數(shù)據(jù)集到Pandas的DataFrame和Series。
對(duì)含有空值的DataFrame進(jìn)行各種選擇操作,以及對(duì)空值數(shù)據(jù)的填充fillna()、刪除dropna(),我們將在后面陸續(xù)介紹。
筆者是技術(shù)進(jìn)步的擁躉,Python 的IDE:Spyder,從剛開(kāi)始是Python(x,y)的作者為Python開(kāi)發(fā)的一個(gè)簡(jiǎn)單的集成開(kāi)發(fā)環(huán)境,發(fā)展到現(xiàn)在V4.0白、富、美的開(kāi)發(fā)環(huán)境,著實(shí)令人驚艷!感謝這個(gè)世界上眾多無(wú)私付出、默默耕耘的人們,有了你們,世界越來(lái)越好!
和其他的Python開(kāi)發(fā)環(huán)境相比,Spyder最大的優(yōu)點(diǎn)就是模仿MATLAB的“工作空間”的功能,可以很方便地觀察和修改對(duì)象的值。
學(xué)習(xí)使用spyder(python IDE) 參考資料:https://blog.csdn.net/u010547283/article/details/76860428
'''
##引入三個(gè)Python 包
##Pandas:數(shù)據(jù)分析包
import pandas as pd?
#"as"顧名思義,即以后可以在程序中以縮寫(xiě)pd 代表 pandas
#numpy:科學(xué)計(jì)算包
import numpy? as np
##xlwings:python操作Excel的模塊,最好的Excel操作包之一,有取代VBA的趨勢(shì)
## xlwings中文入門(mén)學(xué)習(xí)資料之一:https://www.cnblogs.com/catgatp/p/7875683.html
## xlwings英文官方學(xué)習(xí)網(wǎng)站https://docs.xlwings.org/en/stable/
import xlwings as xw
##聲明Excel應(yīng)用程序,及workboos文件路徑
file= r'D:\VBA\LEARNING_ERP.xlsm'?
#字符串前面加r,是表示其后的字符串不轉(zhuǎn)義,使用真實(shí)字符
wb=xw.Book(file)
wb.app.display_alerts=False
#禁止Excel彈出提示的對(duì)話框
#“view”作為存放結(jié)果數(shù)據(jù)集的sheet表
sht_view=wb.sheets['view']
##“基礎(chǔ)表”作為存放原始數(shù)據(jù)集的sheet表
sht_base=wb.sheets['基礎(chǔ)表']
##讓我們看一下Excel中的原始數(shù)據(jù)吧:

'''選中存放原始數(shù)據(jù)集所在的區(qū)域,將數(shù)據(jù)導(dǎo)入Series
第25行第9列,可以使用sheet.range(row,column)的方法,也可以使用sheet[row-1,
column-1]的方法,第一種方法是標(biāo)準(zhǔn)的VB-Excel風(fēng)格,下標(biāo)從1開(kāi)始,使用小括號(hào)();第二種方法遵循的是Python風(fēng)格,下標(biāo)從0開(kāi)始,使用中括號(hào)[]。'''
s_choose=sht_base.range(25,9).options(pd.Series,expand='table').value
## expand='table',指示將從單元格沿right、down擴(kuò)展取數(shù),詳見(jiàn)Xlwings文檔。
'''按F5運(yùn)行程序,然后在IDE右下方的即時(shí)窗口In[ ]:后面輸入print(s_choose),按回車(chē),顯示如下:'''

##上面是VB-Excel風(fēng)格,試一下第二種方法,遵循的是Python風(fēng)格
s_choose=sht_base[24,8].options(pd.Series,expand='table').value

##可見(jiàn)兩種方法,結(jié)果是一樣的
##選中employee 所在的區(qū)域,第25行第1列
range_employee=sht_base[25,1].api.currentregion
##命名區(qū)域
range_employee.name='range_employee'
##導(dǎo)入Dataframe
df_employee=sht_base['range_employee'].options(pd.DataFrame,header=1,index=True).value
'''index=True,指示使用原始數(shù)據(jù)集中的索引默認(rèn)第一列,而不是使用自動(dòng)索引,自動(dòng)索引從0開(kāi)始
header=1,指示使用原始數(shù)據(jù)集中的第一行作為列名,而不是使用自動(dòng)列名,更多使用方法,將在后面陸續(xù)介紹。'''
#按F5運(yùn)行程序,然后在IDE右下方的即時(shí)窗口In:后面輸入print(df_employee),按回車(chē),顯示如下:

##計(jì)算機(jī)顯示的時(shí)候,對(duì)齊有跑題的嫌疑(對(duì)不上標(biāo)題),不過(guò),習(xí)慣了就好!