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