float 转 int_Python处理Excel之多列转多行

前几天,因为一些缘故,需要处理一个包含大量数据的Excel表格。要求具体是将如下表格中的"一""二"列变为"开始"列,"三""四"列变为"结束"列。如下表:

369d214f4c0894304ae5c83ae7eeaa9c.png

初始表

90631f54f5e5e7a2f84102709d3692f2.png

修改后的表

当然,数据少的时候我们可以选择直接使用粘贴复制的手法,但如果数据上千上万呢?这个时候就是咱们写的Python小代码上线的时候啦。

那么,首先,思路:

1、按行取出Excel内所有数据。

03931018739a9e939201e646f24ab056.png

 2、"一""二"变为一列,"三""四"变为一列。并取到"姓名""性别"两列。

8da438330b98465311bfdb421444a8f1.png

 3、"姓名"列必须从['张三','小红']变为['张三','张三','小红','小红']

  "性别"列也同样。

19bf6ee9682f7034bb6bebecbbe6473d.png

 4、创建一个表头列表listh,将以上得到的list00,list11,liststart,listend这四个列表存入一个大列表dataz中,每个列表代表一列。

24887be2c6b0f8a50e14539a3f86c452.png

 5、将dataz与listh存入Excel中。

201b16cb65150ffd4d54921b01445126.png

 6、运用函数及运行程序
全部代码如下:

"""功能:多列转多行作者:橙稚"""import pandas  as pdimport openpyxlimport numpy as npdef data_write(listh, dataz):    file1 = openpyxl.Workbook()    outws = file1.create_sheet(index=0)  # 创建sheet    outws.append(listh)    for f in range(len(dataz[0])):        outws.append(dataz[:, f].tolist())    file1.save("text-1.xlsx")if __name__ == '__main__':    df = pd.read_excel('test.xlsx',dtype=object,keep_default_na=False)    data2 = df.values.tolist()    list0=[]    list1=[]    liststart=[]    listend=[]    for i in range(0,len(data2)):        for j in range(2,4):            liststart.append(data2[i][j])        for k in range(4,6):            listend.append(data2[i][k])        list0.append(data2[i][0])        list1.append(data2[i][1])    list00=[]    list11=[]    for i in list0:        for j in range(0,2):            list00.append(i)    for i in list1:        for j in range(0,2):            list11.append(i)    dataz = [list00,list11,liststart,listend]    listh=['姓名','性别','开始','结束']    dataz=np.array(dataz)    data_write(listh,dataz)

需要注意的地方:

  ①Excel表格中有空白单元格,记得取数据的时候加上keep_default_na=False,不然在存数据的时候空单元格会变成#NAN!

  ② 在用Python取Excel中int数据的时候,记得要加dtype=object,不然的话取数据的时候自动将int型数据变为float型数据。如3变为3.0。

  ③每一次运行前一定要确保test-1.xlsx这个Excel表格不存在,存在的话就手动删掉吧。不然可能会报错的。

  ④根据不同的需求需要更改的地方都用红框圈下来啦。主要集中在二三四步骤内。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值