pandas寫入excel不顯示格式?
使用pandas格式化exc
python與vba處理數(shù)據(jù)的區(qū)別?
有一個csv文件,包含CNUM和COMPANY兩列,數(shù)據(jù)包含空行和重復(fù)行。
要求:
1)刪除空白行;
2)重復(fù)的行數(shù)據(jù)只保留一行有效數(shù)據(jù);
3)將公司列的名稱改為company_new;
4)增加六列,即C_COL,d_COL;e_COL;f_COL;G_COL和H_COL。
首先,使用python熊貓來處理:將熊貓作為pd導(dǎo)入
將numpy作為np導(dǎo)入
從熊貓進(jìn)口數(shù)據(jù)框,系列
d:
文件_對象打開(文件路徑)
Df_csv(file_obj)#讀取csv文件并創(chuàng)建數(shù)據(jù)幀。
Df(columns[cnum,company,c_col,d_col,e_col,f_col,g_col,h_col],fill_valu:公司_新},到位真)#修改欄目名稱。
Ddff.dropna(axis0,howall)#刪除NAN,即文件中的空行。
Df[CNUM]df[cnum]。astype(int32)#將cnum列的數(shù)據(jù)類型指定為int32。
ddf.drop_duplicates(subset[cnum,company_new],keepfirst)#刪除重復(fù)行。
_csv(newpath,indexFalse,encodingGBK)
文件_()
如果__nam:
fil:users12078desktoppythocnum_company.CSV
fil:users12078desktoppythocnum_COMPANY_output.CSV
處理數(shù)據(jù)(文件路徑,文件)保存路徑)
二、用VBA應(yīng)對:選項(xiàng)基數(shù)1
選項(xiàng)顯式
副總管()
出錯時轉(zhuǎn)到錯誤處理
將wb標(biāo)注為工作簿
將wb_out標(biāo)注為工作簿
Dimsht作為工作表
Dimsht_out作為工作表
變暗rngAs范圍
將已使用的行作為字節(jié)顯示
Dimusedrows_outAsByte
Dimdict_cnum_company作為賓語
Dim字符串文件路徑作為字符串
Dimstr_n:賦值
str_file_pathc:users12078desktoppythocnum_company.CSV
str_new_file_pathc:users12078desktoptythocnum_COMPANY_output.CSV
設(shè)置WBcheckAndAttachWorkbook(str_file_path)
設(shè)置sht(CNUM_COMPANY)
設(shè)置wb_out
創(chuàng)建一個CSV文件
設(shè)置sht_outwb_(CNUM_COMPANY_OUTPUT)
設(shè)置dict_cnum_companyCreateObject(腳本。字典)
usedrows(getlastvidrow(sht,A),getlastvidrow(sht,B))
將標(biāo)題COMPANY重命名為Company_New,刪除空白的重復(fù)行/行。
Dimcnum_company作為字符串
cnum_公司
對于sht中的每個rng。范圍(A1,A已用行數(shù))
If((0,1)。價值)公司
(0,1).價值公司_新建
如果…就會結(jié)束
cnum_company-(0,1)。價值
If(cnum_company)-而不是dict_cnum_company。存在(-(0,1)。值)那么
dict_cnum_-(0,1)。值,
如果…就會結(jié)束
下一個rng
循環(huán)dict的關(guān)鍵字,將關(guān)鍵字拆分成cnum數(shù)組和company數(shù)組。
Dimindex_dictAsByte
Dimarr_cnum()
Dimarr_公司()
對于index_dict0到UBound(dict_cnum_)
ReDimPreservearr_cnum(1到UBound(dict_cnum_)1)
ReDimPreservearr_Company(1到UBound(dict_cnum_)1)
arr_cnum(index_dict1)Split(dict_cnum_()(index_dict),-)(0)
arr_Company(index_dict1)Split(dict_cnum_()(index_dict),-)(1)
索引_字典
然后
將數(shù)組的值賦給單元格。
噓_出。Range(A1,AUBound(arr_cnum))(arr_cnum)
噓_出。范圍(B1,B下限(arr_Company))(arr_Company)
添加6列以輸出CSVfil:
Dimarr_columns()作為變量
arr_columns數(shù)組(C_col,D_col,E_col,F(xiàn)_col,G_col,H_col)
噓_出。范圍(C1:H1)arr_columns
調(diào)用checkAndCloseWorkbook(str_file_path,F(xiàn)alse)
調(diào)用checkAndClos:
調(diào)用checkAndCloseWorkbook(str_file_path,F(xiàn)alse)
調(diào)用checkAndCloseWorkbook(str_new_file_path,F(xiàn)alse)
末端接頭
輔助功能:
獲取工作表中第N列的最后一行
函數(shù)getLastValidRow(in_ws作為工作表,in_col作為字符串)
getLastValidRowin_ws。單元格(in_,in_col)。結(jié)束(xlUp)。排
結(jié)束功能
函數(shù)checkAndAttachWorkbook(in_WB_pathAsString)作為工作簿
將wb標(biāo)注為工作簿
將mywb顯示為字符串
mywbin_wb_path
對于工作簿中的每個wb
如果LCase(wb。全名)LCase(mywb)Then
設(shè)置checkAndAttachWorkbookwb
退出功能
如果…就會結(jié)束
然后
設(shè)置wb(in_wb_path,Updat:0)
設(shè)置checkAndAttachWorkbookwb
結(jié)束功能
函數(shù)checkAndCloseWorkbook(in_WB_path為字符串,in_saved為布爾值)
將wb標(biāo)注為工作簿
將mywb顯示為字符串
mywbin_wb_path
對于工作簿中的每個wb
如果LCase(wb。全名)LCase(mywb)Then
savechang:in_saved
退出功能
如果…就會結(jié)束
然后
結(jié)束功能
三、輸出結(jié)果:
兩種方法的輸出結(jié)果是相同的:
四、對比總結(jié):
Python熊貓有很多內(nèi)置的地方。管理數(shù)據(jù)的方法,我們不不需要反復(fù)制作輪子,使用起來非常方便,代碼也簡單很多。
ExcelVBA通過使用數(shù)組、字典等數(shù)據(jù)結(jié)構(gòu)(實(shí)際需求中,數(shù)據(jù)量往往很大,所以有些地方?jīng)]有直接遍歷單元格的方法),以及處理字符串、數(shù)組、字典的多種方法來處理這個需求。文件的操作也很復(fù)雜。一旦出現(xiàn)錯誤,比python更難調(diào)試。代碼已經(jīng)盡可能優(yōu)化了,但還是遠(yuǎn)遠(yuǎn)超過Python。