工作中获取的数据,特别是第三方数据有可能存在各种各样的问题,与其对着混乱的数据无从下手,不如在一开始就将数据尽可能得整理为标准格式,并尽可能保证数据的的正确性和完整性。
使用Excel整理数据时,应该考虑的问题有很多,如:
本文将讨论如何将CSV数据导入Excel,并对数据进行一些初步加工,如提取并进一步完善数据、转置等。
本文所需的测试数据下载地址:http://caohuayu.com/res/Res.aspx?id=res20251201。
打开Excel2016并创建一个新的工作簿,然后点击“数据”选项卡>>“获取外部数据”组>>“自文本”,在打开文件对话框中选择CSV数据文件并点击“导入”,打开导入向导窗口如下图所示。
这里根据实际数据格式进行选择,如本例使用逗号分隔每一列的数据,并且第一行是包含了指标名称的标题行;然后点击“下一步”按钮,如下图所示。
此步骤中需要选择正确的列数据分隔符,本例为逗号,然后点击“下一步”继续。
如上图所示,这一步需要确定每一列的数据类型,如常规、文本、日期,并且可以不导入某一列,此时应选择“不导入此列(路过)”。确定每一列数据类型设置正确,显示格式正确后,点击点击“完成”按钮确认导入操作,然后会选择导入数据保存的位置及相关设置,如下图所示。
点击“确定”按钮确认数据导入操作,结果如下图。
Excel2021中导入CSV数据的操作与Excel2016略有不同,首先还是打开Excel2021并创建一个新的工作簿。然后点击“数据”选项卡>>“获取和转换数据”组>>“从文本/CSV”按钮,然后选择CSV文件,并点击“导入”确认,可以看到导入初始界面与Excel2016不同,如下图所示。
如上图所示,除f1列的其它列的数据格式都可以正常识别,而f1列中有前导0的几个数据识别出现了问题,这里自动识别为数字而删除了前导0;实际上,可以看出f1中是某种编号,其中是有使用0开始的,此时不能直接加载,而是要点击“转换数据”按钮进行一些数据格式设置。
点击“转换数据”按钮后,Excel2021会打开PowerQuery窗口,如下图所示。
接下来要做的就是确认每一列的数据类型,如上图箭头所指的位置,可以看到f1列识别为数值类型,显示为123图标,而f2、f3列识别为文本类型,显示为ABC图标。点击f1列的123图标,然后在列表中选择“ABC文本”;由于是初次导入数据并且f1列确实是文本类型,所以在弹出的窗口中直接选择“替换当前转换”即可。操作后可以看到f1列数据中的前导0已正确显示,如下图所示。
确认所有列的数据类型无误后,可以点击PowerQuery窗口的“主页”选项卡>>“关闭”组中的“关闭并上载”按钮,如下图所示。
操作完成后,Excel2021会使用新的工作表显示导入的数据,如下图显示了导入的列名和前10行数据。
请注意,在Excel2021中导入数据默认转换为数据表对象,如果需要恢复成默认的原始格式,即普通的工作表区域,可以选择数据区域,然后点击“表设计”选项卡>>“工具”组>>“转换为区域”按钮,在弹出的对话框中确认操作即可。
虽然在《Excel+Python轻松掌握数据分析》一书中根据“ 剧情”需要也讨论过分列,但对于类似xxx元、xx元这样的数据,如果需要删除数字后的“元”字而只保留数字,最简单的方法就是将数据中的“元”替换为空白字符串,如公式=SUBSTITUTE("199元","元","")。
分列一般用于数据有统一格式的情况下,如文本有相同的含义、长度或分隔符等。前面已经学习了如何通过文本内容截取和自动填充等操作提取身份证号码的信息,下面将使用分列功能从身份证号码中提取区划代码,生日的年、月、日,以及表示性别的第17位字符,可以继续使用上述操作导入的数据进行操作。
提取的新数据共5列,需要在f3列后提前插入5个空白列来保存数据,选中f4列,然后通过鼠标右键菜单“插入”项添加5列。此外,分列产生的数据会替换原来的数据,如果需要继续保留身份证号码,可以将身份证号码列复制一份,本文示例中就复制了一列新的身份证号码进行操作,如选中f3列并复制(Ctrl+C),然后使用鼠标右键菜单,选择“插入复制的单元格”。接下来选中后一个包含身份证号码的列,然后点击“数据”选项卡>>“数据工具”组>>”分列”按钮打开分列操作向导;由于身份证号码没有分隔符,在这里选择“固定宽度”,如下图所示。
点击“下一步”按钮,可以看到包含数字刻度的窗口,如下图所示。
数据预览中,在6个字符后、10个字符后、12个字符后、14个字符后、16个字符后、17个字符后的位置点击鼠标左键确定分隔位置,如上图所示。然后点击“下一步”按钮可以进一步设置各列的数据类型,如下图所示。
这一步骤中,将前6位,即区划代码部分设置为文本格式;生日的年、月、日保存常规格式;15和16、18位字符选择“不导入此列”,数据预览中显示为“忽略列”;最后点击“完成”,这样就将区域代码、生日年、月、日,以及表示性别的第17位字符提取为单独的列,如下图所示。
从原始数据中提取所需要的数据后,还可以进一步完善其格式,接下来就将生日的年、月、日信息组合为日期型数据,我们使用上述数据继续操作。在提取的年、月、日后添加新列,然后在新列的第2行,即recid为1的行添加公式“=DATE(F2,G2,H2)”,然后向下复制公式完成日期的组合工作,如下图所示。
如果只需要保存生日的日期格式,可以对日期列进行复制并粘贴为数值,然后根据需要确定是否继续保留独立的年、月、日数据。
接下使用“男”和“女”表示性别,在表示性别的数字列后添加新列,然后在新列第2行添加公式“=IF(MOD(J2,2)=1,"男","女")”,然后向下复制公式完成性别数据的填充,结果如下图所示。
转置就是对二维数据的行和列进行转换,如获取了下图所示的数据结构。
可以看到,此数据结构中每一行是一个指标的数据,不符合我们所说的二维表标准格式,此时可以选择所有数据并复制;然后可以在一个新的区域或新的工作表中粘贴数据区域的左上角单元格点击鼠标右键,在鼠标右键菜单中选择“选择性粘贴”,在打开的窗口中选中“转置”,并点击“确定”按钮确认操作,如下图所示。
可以看到粘贴后的数据行和列进行了转换,如下图所示,
接下来的文章,我们将继续数据的整理工作。