Python处理Excel之多列转多行

时间:2024-02-19 10:39:23

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

转为

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

思路:

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

  

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

  

  

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

  "性别"列也同样。

  

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

  

 5、将dataz与listh存入Excel中。

  

 6、运用函数及运行程序

 全部代码如下:

    

"""
功能:多列转多行
作者:橙稚
"""
import pandas as pd
import openpyxl
import numpy as np

def 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表格不存在,存在的话就手动删掉吧。不然可能会报错的。

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

最后:

欢迎关注公众号寻船人,后台回复“列转行”获取代码及小例子。更多简便小工具小方法橙子都会在公众号分享。一起来寻找更简便的方法吧。