pandas數(shù)據(jù)清洗極致版

關(guān)鍵詞:清洗,追加,替換,中文字符去除,移動(dòng)文件

原數(shù)據(jù):

1.原數(shù)據(jù)每天都是一張表,需要把所有表格合并成一張表,并且每天都會(huì)有一張表,所以要保證可以追加;


每天的數(shù)據(jù)源表

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ù);

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容