關(guān)鍵詞:清洗,追加,替換,中文字符去除,移動(dòng)文件
原數(shù)據(jù):
1.原數(shù)據(jù)每天都是一張表,需要把所有表格合并成一張表,并且每天都會(huì)有一張表,所以要保證可以追加;

2.每張表里有兩個(gè)sheet,每個(gè)sheet都要單獨(dú)拎出來(lái)合并,就是所有表里的sheet1合并成一張新表,所有的sheet2合并成另一個(gè)新表;
3.表格里面沒(méi)有日期列,日期都是在文件名里;
4.數(shù)值列里面會(huì)包含文本,比如20000會(huì)有些是2萬(wàn);
5.間斷產(chǎn)生空白行,需要?jiǎng)h除;
6.空白單元格需要看情況補(bǔ)充;
7.可能有些分公司當(dāng)日沒(méi)有填寫數(shù)據(jù),在合并的表里不是一個(gè)連續(xù)的時(shí)間序列;
理想數(shù)據(jù):
1.一張數(shù)據(jù)源表包含所有日期的數(shù)據(jù);
2.所有數(shù)據(jù)都是標(biāo)準(zhǔn)的,所有分公司的數(shù)據(jù)都是連續(xù)的;
3.數(shù)據(jù)源表可以合并,追加,替換;
理想處理過(guò)程:
單個(gè)文件清洗 → 單個(gè)文件清洗出兩個(gè)sheet → 根據(jù)sheetname分別合并/追加/替換到對(duì)應(yīng)的數(shù)據(jù)源表
一、單個(gè)文件清洗
1.去除列名里面的特殊符號(hào)

2.刪除空白行:由于存在亂七八糟的空白單元格,所以選取兩列,保證兩列都是空白的情況下才刪除改行;

3.添加日期列:需要從文件名里拿出日期來(lái),這里將日期是str格式,在使用的時(shí)候會(huì)轉(zhuǎn)成datatime格式;

4.根據(jù)需要填充空白單元格:這里分公司名稱必須有,通過(guò)原始表發(fā)現(xiàn)空著的名稱一般都是和前面的一樣,所以使用了ffill,ffill是使用前面的非空值填充,bfill是使用后面的非空值填充;

5.這里遇到的一個(gè)最大的問(wèn)題是,所有的單元格都有可能出現(xiàn)有單元格的值前后帶空格,所以需要去除字符串內(nèi)的單元格;這里使用了applymap,因?yàn)槲倚枰獙?duì)整張表的每個(gè)單元格進(jìn)行遍歷,apply作用于一整行或一整列,map作用于series的每個(gè)元素;

6.數(shù)值列里的文本替換成數(shù)值,如果是0.2萬(wàn)這種格式的文本,替換成2000;

7. 根據(jù)sheet_name的不同,輸出不同的表;

二、追加
通過(guò)for循環(huán),對(duì)當(dāng)前文件夾的文件追加到合并的那張表中,追加完的文件移動(dòng)到另一個(gè)文件夾中;

三、標(biāo)準(zhǔn)
手動(dòng)包含完整時(shí)間序列和日期的維度表,然后使用左關(guān)聯(lián)關(guān)聯(lián)事實(shí)表,這樣如果該天沒(méi)有數(shù)據(jù)填寫的話也會(huì)有記錄;

四、替換
如果有一個(gè)表更新了,那么需要更新合并表里的數(shù)據(jù),因?yàn)槿掌诤头止径际侵貜?fù)的列,無(wú)法使用update進(jìn)行更新。所以只能刪除合并表對(duì)應(yīng)日期的數(shù)據(jù),再追加更新表的數(shù)據(jù);
