在进行将多个表的数据合并到一个表后,发现输出到EXCEL表的数据发生错误,数值型数据末尾都变成了0。这是因为excel数据超过11位,自动以科学计数法显示,其最大处理精度为15位,超过15位,以后数字自动变0。找了一些解决方法,发现用.astype('数据类型')还是挺方便的。我在输出时,将数值型的数据(int)转化成了字符串(str)。
使用方法:
先来个没有使用astype转换的输出结果:
可以看到 订单号 和 转单号码 都以科学计数法显示。其中订单号为18位,超过15位的显示为0。转单号码为12位,数值正确。
插入 num=num.astype('str')这行代码,将数据转为str,输出如下:
全部代码如下:
#清洗台运货态表
import pandas as pd
import os
file=os.listdir(r'C:\Users\Administrator\Desktop\货态数据清洗\台运联翘状态表')[0]#读取指定文件夹下的第一个表名
sheets=['香港','泰国','台灣']
D=[]
E=[]
for x in sheets:
data=pd.read_excel('C:/Users/Administrator/Desktop/货态数据清洗/台运联翘状态表/'+file,sheet_name=x)
data.rename(columns={'訂單號':'订单号','轉單號碼':'转单号码','狀態':'状态'},inplace=True)
d=data[['订单号','转单号码','状态']]
#len(d)输出d的行数
#d.shape[0]#求行数
#d.shape[1]#求列数
d['地区']=x
d.astype('object')
D.append(d)
num=pd.concat(D,axis=0)#合并list表D中的元素
num=num.astype('str')#将整个dataframe都转换为str类型
# num['订单号']=num['订单号'].astype('str')
# num['转单号码']=num['转单号码'].astype('str')
print(num.info())
num.to_excel(r'C:\Users\Administrator\Desktop\货态数据清洗\台运状态汇总.xlsx',index=False)
除了用astype进行类型转换,也可以自定义函数来批量修改数据类型(通过int(),str()等直接转换)。还可以用Pandas的一些辅助函数(如to_numeric()、to_datetime())。知乎上也有人做了详细的描述,感谢作者。链接如下:
https://zhuanlan.zhihu.com/p/35287822