关键词:清洗,追加,替换,中文字符去除,移动文件
原数据:
1.原数据每天都是一张表,需要把所有表格合并成一张表,并且每天都会有一张表,所以要保证可以追加;
2.每张表里有两个sheet,每个sheet都要单独拎出来合并,就是所有表里的sheet1合并成一张新表,所有的sheet2合并成另一个新表;
3.表格里面没有日期列,日期都是在文件名里;
4.数值列里面会包含文本,比如20000会有些是2万;
5.间断产生空白行,需要删除;
6.空白单元格需要看情况补充;
7.可能有些分公司当日没有填写数据,在合并的表里不是一个连续的时间序列;
理想数据:
1.一张数据源表包含所有日期的数据;
2.所有数据都是标准的,所有分公司的数据都是连续的;
3.数据源表可以合并,追加,替换;
理想处理过程:
单个文件清洗 → 单个文件清洗出两个sheet → 根据sheetname分别合并/追加/替换到对应的数据源表
一、单个文件清洗
1.去除列名里面的特殊符号
2.删除空白行:由于存在乱七八糟的空白单元格,所以选取两列,保证两列都是空白的情况下才删除改行;
3.添加日期列:需要从文件名里拿出日期来,这里将日期是str格式,在使用的时候会转成datatime格式;
4.根据需要填充空白单元格:这里分公司名称必须有,通过原始表发现空着的名称一般都是和前面的一样,所以使用了ffill,ffill是使用前面的非空值填充,bfill是使用后面的非空值填充;
5.这里遇到的一个最大的问题是,所有的单元格都有可能出现有单元格的值前后带空格,所以需要去除字符串内的单元格;这里使用了applymap,因为我需要对整张表的每个单元格进行遍历,apply作用于一整行或一整列,map作用于series的每个元素;
6.数值列里的文本替换成数值,如果是0.2万这种格式的文本,替换成2000;
7. 根据sheet_name的不同,输出不同的表;
二、追加
通过for循环,对当前文件夹的文件追加到合并的那张表中,追加完的文件移动到另一个文件夹中;
三、标准
手动包含完整时间序列和日期的维度表,然后使用左关联关联事实表,这样如果该天没有数据填写的话也会有记录;
四、替换
如果有一个表更新了,那么需要更新合并表里的数据,因为日期和分公司都是重复的列,无法使用update进行更新。所以只能删除合并表对应日期的数据,再追加更新表的数据;