Python处理Excel之多列转多行
前几天,因为一些缘故,需要处理一个包含大量数据的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表格不存在,存在的话就手动删掉吧。不然可能会报错的。
④根据不同的需求需要更改的地方都用红框圈下来啦。主要集中在二三四步骤内。
最后:
欢迎关注公众号寻船人,后台回复“列转行”获取代码及小例子。更多简便小工具小方法橙子都会在公众号分享。一起来寻找更简便的方法吧。
原文地址:https://www.cnblogs.com/chengzhiya/p/12425964.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 手摸手教你撸一个微服务框架-关于服务端的处理
- 聊聊claudb的string command
- windows下安装nodejs
- 【Java面试总结】Java集合
- 《JavaScript 模式》读书笔记(8)— DOM和浏览器模式1
- 《JavaScript 模式》读书笔记(8)— DOM和浏览器模式2
- 5000字 | 24张图带你彻底理解21种并发锁
- JavaScript-变量
- Android应用安装卸载监控
- 细数这些年被困扰过的 TS 问题
- 将WordPress插件Elementor标签插入到WordPress模板文件以使用Elementor编辑
- WordPress自定义新建多区域widget小工具调用
- WordPress调用分类目录 及输出当前分类下的二级目录 和分类文章数量显示
- CSS让Li标签溢出后自动换行
- docker里运行docker命令