美文网首页pythonPython
pandas数据清洗极致版

pandas数据清洗极致版

作者: 肖肖肖二 | 来源:发表于2020-05-29 21:04 被阅读0次

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

    原数据:

    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数据清洗极致版

        本文链接:https://www.haomeiwen.com/subject/tnpfzhtx.html