python办公自动化 -- pandas数据分析专栏
使用数据分析的强大模块pandas的
read_excel()函数读取excel表格
是非常方便实用的
但是,时不时也会遇到读取左起带0的数字
例如001、000333222等
我们希望read_excel()读取后还是原来的样子
不要省去了左边的0
平时读取左边带0的数字
下图excel表格A列的单元格格式是文本格式的,这点很重要!
然后输入带0数字如下所示:
使用read_excel()读取,不设置dtype参数,结果如下:
左边0没有被读取
>>> df.dtypes
a int64
函数read_excel()默认会自动识别数据列,将其转为最适合的数据类型int。
下面,我们加上参数dtype=str,强制将所有列作为字符串格式读取
结果如上所示,读取了左起带0的数字。
或者像下面这样设置参数,也是可以读取了左起带0的数字。
>>> df = pd.read_excel('e:/1.xlsx',dtype=object)
或者>>> df = pd.read_excel('e:/1.xlsx',converters={'a':str}) 这里a是表格中标题的列名称
如果有很多个列或者只需指定的列,也可以这样设置:
>>> zd = {x:str for x in df.columns}
>>> df = pd.read_excel('e:/1.xlsx',converters=zd)
这里zd使用了字典解析式,df.columns可以换成指定列名称组成的列表等序列。当然,也可以如下设置,指定某些列转为指定的数据类型:
>>> zd = {'a':str} 或者 zd = {'a':str, 'd':np.int32}
>>> df = pd.read_excel('e:/1.xlsx',dtype=zd)
以上方法,都可以将左边带0的数字读取出来。
但是,我们遇到了一种情况,即使使用上面的任何一种方法,都无法将左边带0的数字使用read_excel()读取出来。
这又是什么情况呢?
奇怪的左边带0数字
我们看下面的表格左边带0数字
>>> df = pd.read_excel('e:/1.xlsx',dtype=str)
设置参数,强制所有列都是字符串格式
但是,读取后前2个数字被去掉了0,
第3个数字则保留了左边的0,这是啥情况呢?
为什么设置了参数不起作用呢?
其实,原因就出在表格的单元格格式!
前2个带0数字,其单元格格式是自定义的,且格式类型被自定义为0000格式,即单元格占4个字符,不足字符位数左边补0。
尽管第3个数字也设定了0000格式,但是由于其之前是文本格式,当再被设置为0000格式时,无法自动转为0000格式,其单元格左上角有1个灰色的三角,表明其还是文本格式的。当鼠标双击它,才会转为0000格式。
而上面的2个数字,是将单元格设置0000格式后,才输入的数字,所以,在输入时自动就成为0000格式。这种自定义格式的单元格,使用read_excel()和设置参数,无法将其左边的0读取!
如何读取这种奇怪的左边带0数字?
在表格中,将0000格式的数据单元格设置为文本格式,可行吗?
没效果!当将这些数据列设为文本格式后,左边0都消失了!
办法1:将0000格式的数据拷贝到记事本,在记事本中都是带0的数字。之后,将表格中的0000格式数据设置为文本格式,之后,将记事本中的带0数字拷贝粘贴到表格之中,就成为文本格式的带0数字了。
效果:可行!之后,再用read_excel()进行读取带0数字。
办法2:直接读取数据,之后使用str.rjust()函数补齐左边的0
效果:可行。如下所示。但是,当带0数字的位数不一致的时候,这种方法就不行了。下面例子假设所有数字都是4位的,不足位数,左边补齐0。
办法3:将表格文件保存为csv格式,之后使用read_csv()函数读取
效果:可行。通用办法!如下所示。后面必须设置参数dtype。
更多python办公自动化案例和经验
请继续关注我们的公众号和头条号
后期会持续进行更新
“白领服务工作室”的系列视频课如下:
Python办公自动化---Python入门课程
Python办公自动化---Python进阶课程
Python办公自动化---正则表达式
Python办公自动化---数据分析
Python办公自动化---网络爬虫
Python办公自动化---Excel表格专栏
Python办公自动化---Pdf专栏
Python办公自动化---Word专栏
Python办公自动化---图像专栏
Excel/WPS表格 --- 数据处理
如需学习以上视频课程,敬请留言!
作者 | 小白
来源 | 原创
编辑 | 白领服务工作室