IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 如何对Excel列快速移动或对调?四种方法给你一点解决问题的灵感 -> 正文阅读

[Python知识库]如何对Excel列快速移动或对调?四种方法给你一点解决问题的灵感

工作中遇到关于excel的一个小小的问题,如下有32行71列数据,现在需要对71个列进行对调,如果是你,你会怎么解决?如果一列一列拖动,可以解决问题但是工作量大容易出错,所以得想个简便的方法。因为列标题恰好是日期,可以通过排序的方式对调,不过好像只有行排序,没有对列进行排序的功能菜单。那怎么办呢?

原数据(图一):

预期效果(图二):

思路一:Excel转置+排序

玩excel很溜的朋友应该能很快想到办法,我可以通过对数据复制、转置粘贴、排序,再复制、转置粘贴,不就好了么?思路是对的,我们来实现一下。

1.将图一表的sheet1中的原数据复制,再转置粘贴到sheet2:

2.对sheet2"时间“列升序排序:

3.将sheet2中的原数据复制,再转置粘贴到sheet3,得到图二。

这样就完成了上面效果啦,是不是相比手动一列一列拖动简单的多呢?看到这里可能大家会吐槽这有什么用?太简单了。实际上我想提供的是解决这么个小小问题的一些思路想法。如果这个数据量再大一点(比如一千行一前列)呢?两次复制粘贴会不会占用空间和时间(你试试会不会卡的要死)?我们可以用PowerBI来不用复制粘贴就实现转置+排序。

思路二:PowerBI转置+反转行

1.导入数据,然后点转置:

2.点击反转行(它专门有个“反转行”的功能):

3. 再次转置:

4. 最后一步,移动最后一列到第一列(因为反转行把“时间”列给掉到后面去了):

可以看到PowerBI的好处是不需要复制粘贴,只需要几次点击就可以完成目的。而且它解决了如果不是可以排列的日期格式数据,也可以通过反转行进行快速排列。在更多数据和非日期数据方面,是不是PowerBI更方便?

然而这样还不够,咱们这个问题是解决了,如果问题的条件又发生变化,比如我需要前三十列对调,后三十列对调,你该怎么解决呢?用上面的方法把数据拆分再合并也可以达到目的。但是如果你会使用Python,就能更加灵活的解决这类问题。

思路三:Openpyxl正向导入,反向输出

1. 导入库和数据

#load_workbook库是专门用来导入excel文件的库
from openpyxl import load_workbook
#get_column_letter库是用将数字格式单元格地址转换为字母形式
from openpyxl.utils import get_column_letter
wb = load_workbook(r"D:\Datalu\testdata\2021CPI.xlsx")
#获取Sheet1的数据
ws = wb['Sheet1']

2. 将导入的数据写入一个列表中:

total_list = []
#从第一列第一行自上往下到第一列最后一行,再第二列第一行自上往下到第二列最后一行,以此类推,竖着遍历
for r in range(1, ws.max_column + 1):
    row_list = []  # 每一列建立一个小list
    for c in range(1, ws.max_row + 1):
        v = ws.cell(c, r).value  #获取每个遍历到的单元格的值
        row_list.append(v)       #把每一列每个单元格的值append到列表中
    total_list.append(row_list)  #再把每一列数据组成的列表append到大列表total_list中
print(total_list)  #打印列表

3. 将列表反转对调,再写入到sheet2中:

这样我们就实现了对71个列的对调,但是却把原本的第一列调换到最后一列去了,所以还得再放回来:

4.把”时间“列移动到第一列:

虽然是解决了问题,但是使用了二十三行代码,非常繁琐,如果对python/openpyxl库不熟悉的话可能都懒得用。不过这个好处是什么呢?就在于如果你学会使用openpyxl这个库的语法,你就可以定制绝大部分想实现的Excel的功能,你第一次解决一个问题写代码时比较麻烦,但是解决同类问题只需要改动小小部分就可以实现,而其他工具可能就变得麻烦了;还有个好处是代码一次写成,多次复用,效率大大提高。

还有没有更好方法呢?有!

思路四:pandas列标题对调

#导入数据和库
import pandas as pd
df = pd.read_excel(r"D:\Datalu\testdata\2021CPI1.xlsx")
#获取列名的列表
temp = list(df.columns)
#跟上面的思路一样,把列表对调
temp.reverse()
#把调换到最后一列的“时间”列用列表的拼接功能放到第一列
temp2 = temp[-1:]+temp[:-2]
# 生成新的数据表df2
df2 = df[temp2]
df2.to_excel('test3.xlsx',index=False)

看!六行代码搞定,既不需要你复制粘贴,也不需要反复点点点,还不需要写那么多代码,如果问题发生变动只需要改动部分代码,如果数据不能排序也可以使用列表切片的办法随便调换。是不是鲁棒性更强了呢?

把这个小问题复杂化其实也是想将复杂问题简单化,如果你知道解决问题的本质思路,你也了解多种工具,就可以综合多种情况快速解决问题而不会怼着一个工具绕圈子。另外也可以看出,Excel和BI等处理数据的能力很强大,它把绝大部分处理数据的过程都简化成小步骤,通过组合就能实现很多目的,但它限于软件的框架而有局限性,比如数据量小、缺乏程序化;而Python等编程工具的DIY程度就比较高,你可以利用它的语法读写Excel,快速反复调用,而不需要手动重复,所以我比较喜欢用Python来操作Excel实现数据分析和办公自动化。

最后欢迎大家关注我,我是拾陆,搜一搜公众号“二八Data”,更多技术干货持续奉献。在这里插入图片描述
在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-02-06 13:47:28  更:2022-02-06 13:47:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:48:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码