Excel ETL处理五要素 常见问题

image.png

经常 我们在处理小数据集是 不想用大刀,逮住了excel 就想 一直拖拖拉拉就把数据先处理一下,实在处理费力,再从 python numpy pandas 处理一通。

常见的 在处理五要素的时候,姓名基本没啥要处理的,
1.身份证号 手机号 银行卡号 经常是 显示为 E+17 或者 前面带有 ``` 字符
2.申请日期经常是各种格式,有时候一不小心就变成乱码的数字 后者####。
3.如果 excel 有外部链接存在,即使忽略,但是 在修改的时候还是非常糟心,要等很久,而且经常无法保存,excel就崩溃了
4.还有就是 本身就是文本,但是使用 TEXT LEFT RIGHT MID IF 没有任何效果
5.excel 读取 含有中文的数据显示乱码
6.多条件的替换问题,if嵌套。
7.批量 替换 匹配
8.空值问题
9.筛选问题
10.脚本读取文件

其实就是以上的这些小情况,经常浪费大量时间,急需一招狠制敌

接着说 1.
因为很多时候 excel会把一些类数值的身份证号和手机号当做数字,这个其实是数据源在使用python处理的时候没有来得及保存 对应列的 数据类型。
在出现 E+17,我们首先想到的是修改 单元格格式,比如保存为文本,假如正常那简直是万幸,如果不可以,可能会发现 修改后的数据末尾都变成了3个零。
另外一个终极方法
这里,有一个简单的操作方法:选择数据源——右键设置单元格格式——自定义——选择0,按确定——结果出来了。结果很明显,是我们需要的效果,而且快捷,方便。

另外就是使用python pandas读取 ,设置 dtype=np.str

对于 身份证或者手机号 银行卡号 数据首位出现 【`】字符的,可以使用 RIGHT MID 函数做数据的截取

对于数据出现 ###,一般修改单元格格式 ,或者 拉长单元格,或者 python读取一下就可以处理

最后就是说2了。日期
其实这个日期,就是格式太特么的多和复杂不固定。我们现在 使用的是 类似 2018-4-17 这种格式,所以只要不符合这种格式的,我们都会需要做一些转化,
最简单的 就是使用 TEXT 函数 ,一般这样用 =TEXT(E2,"yyyy-mm-dd")
基本就可以转化过来。
如果以上不起作用 参考 处理 4 的方法 不断尝试 ,最后确认函数真的不会起作用为止。
之后如果 不小心 变成一段数字了,修改单元格格式,转回日期一般是有效的。
如果日期 函数不起效果,我们使用截取 拼接的方式 使用 RIGHT LEFT MID
CONCATENATE() 这些函数 一般也可以胜任

        def to_date_yl(x):
            try:
                a = pd.to_datetime(str(x),format='%Y%m%d')
                j = (today - a).days
            except:
                j = np.nan
            return j

如果 还是不行也可以 使用 YEAR() DATE() EXCEL 本身的日期处理函数
另外就是修改单元格格式 ,尝试一下各种日期格式是否可以满足要求
另外的杀手锏就是 python pandas 和numpy都有 时间处理的函数
可以参考
推荐阅读
https://segmentfault.com/a/1190000011145901

https://blog.csdn.net/ly_ysys629/article/details/73822716

下面分别说一下 。先说 3
这种带外部链接存在的,曾经尝试过全文copy 新的 sheet 甚至是新的excel文件,但是还是崩溃,所以还是使用python 的pandas 。在使用pandas 读取后,根据列名 筛选后,另存为新的excel 文件或者csv文件 ,这样一般不会有 问题,顺利解决,一般文件也变小。

再说 4.
对于 使用函数 并不起作用的列,一般 情况 可能单元格 格式不是文本,可以先修改单元格格式转为文本后再尝试,
假如还是失败,则 复制该列,选择有选择粘贴 只要值,在进行函数尝试 ,
如果还是失败,则 新建一个sheet ,在复制 有选择粘贴 只要值,再进行函数尝试,
如果还不行,则新建 excel 再复制有选择的粘贴 只要值。在进行函数尝试,
假如还不可以 则使用python pandas 读取,并设置 dtype=numpy.str,
如果还是不可以,数量少自己手动改,数量多 则请求数据源从新整。
另外 还可以尝试 另存为比如csv 格式 或者使用python 另存为 其他新文件或者csv,再尝试读取 函数修改

之后说5

Excel 读取汉字乱码 ,sublime 也乱码
可以使用 python pandas 读取 ,
如果 utf-8 不行 ,就转 gbk

另外就是 excel 读取没有乱码 ,但是 在 Terminal 终端 读取 中文又乱码了,怎么办 ,当然 好办,excel 保存为csv 或者txt ,使用sublime 或者notpad ++ 打开 ,选择 标题栏 【FILE] 下拉框里 选择【Save with Encoding 】,选择 第一个 【UTF-8] 或者 【UTF-8 NO BOM],则再次在终端命令行读取 ,中文可以正常显示。

说说 6 多条件 替换

一定要 主要了 如果 if 的condition 是 比较数值,这个不用使用单引号 双引号,
如果condition是 文字 匹配的话,切记 一定要使用英文下的双引号,否则 报错,英文下的单引号也会报错。if 嵌套可以很多个if 像套娃一样套着,另外 if 还可以和 AND OR 一起配合着使用
比如

=IF(K2="坏","1",IF(K2="已还","-1",IF(K2="","0",IF(K2=" " ,"0","F"))))

=IF(C9>15000,20%,IF(C9>12500,17.5%,IF(C9>10000,15%,IF(C9>7500,12.5%,IF(C9>5000,10%,0)))))



=IF(B2>97,"A+",IF(B2>93,"A",IF(B2>89,"A-",IF(B2>87,"B+",IF(B2>83,"B",IF(B2>79,"B-", IF(B2>77,"C+",IF(B2>73,"C",IF(B2>69,"C-",IF(B2>57,"D+",IF(B2>53,"D",IF(B2>49,"D-","F"))))))))))))

还要说7
对于 批量替换 匹配的,这个真是excel 函数最大的魔力。设置好函数后,回车显示好效果,没问题的就直接双击 黑实心十字 【+】,然后这个函数就会作用到整列,需要注意的就是 如果该列有空值的话,经常会阻隔函数的继续执行 ,需要我们 大概手动在拖拉一下,再双击 之后的。

8空值的处理
由于我们经常是胡子嘴巴一起抓,excel 和python 经常会遇到处理空值的问题,关键空值还不太统一 ,有 "" " " "\t" nan null None ,几种,需要我们不断归一为一种,有时候 excel 没有 python pandas 处理默认就变成 NAN,如果不小心保存了,在新打开 excel文件就都有 NAN 或者nan ,需要我们处理

出现 这个
ValueError: empty string for float() data = data.fillna('')
data["field"].isnull
data.dropna()
Pandas 在读取的时候 加一个 参数 dtype=np.object

9.另外 excel 本身有很多很简单 也超级好用的工具箱
最好用的就是筛选 ,可以比较数值 ,是否包含字符,长度 来做筛选,
另外 比较好用的是 vlookup 这个函数 ,其实比较高大上,用好了 非常节省时间
另外是 比如删除 重复项 , 合并计算 模拟分析 排序,
【公式】 【数据】 是 留给数据分析师最好的武器

10.比如我们的小数据经常还是需要存储到hive 库中,大部分我们会写一个脚本
来etl 并执行 hive -e hql ,然后使之可以批量 存储。有时候 读取 txt文件 会出错 ,比如 列 粘连了, 其实 可以把excel 另存为 csv 格式 ,这样可以避免 列粘连。
大部分我们的脚本都会ftp上传到服务器上,有时候很大,好不容易上传了, 发现文件还是有点错误 ,比如 列名header 应该去除没有去除,比如数据末尾多了好多空行 ,比如 需要批量replace ,需要你 可以 熟练使用 vim 或者 emacs ,最好 安装 python3.6 ptpython pandas numpy sklearn 等常用的包

  1. 有时候 我们 某一列都是 同一 文字,如果是 中文的话 使用 =TEXT(E2,"哈哈")
    如果同一文字是英文 的话,使用 text 可能不会有效果,可以使用 IF()进行赋值
    以上基本上是 使用excel 会遇到的80%的比较恶心的问题,如果解决了这些,基本上 可以节约很多时间

你可能感兴趣的:(Excel ETL处理五要素 常见问题)