pandas数据清洗极致版

关键词:清洗,追加,替换,中文字符去除,移动文件

原数据:

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进行更新。所以只能删除合并表对应日期的数据,再追加更新表的数据;

你可能感兴趣的:(pandas数据清洗极致版)