Python按行打乱Excel表格数据


因做数学建模比赛,需要打乱训练数据,于是用python写了个简单的小程序,作用就是按行打乱Excel表格。

先说一下需要使用的第三方库openpyxl,Openpyxl是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库,其功能非常强大。Excel表格可以理解为一个二维矩阵,行用1,2,3,4,5.....等表示,在Openpyxl可以用来作为行索引。列用A,B,C,D,E,F.......表示,在Openpyxl中可以用来当做列索引,描述一个单元格的位置需要一个行标、一个列标。如A1表示第一行第一列对应的单元格,E4表示第四行第五列对应的单元格。更多操作方法见https://blog.csdn.net/weixin_43094965/article/details/82226263

  • 效果图

上图原数据,下图打乱后数据

  • 安装openpyxl

 

pip install openpyxl

 

 

  • 大体思路

  1. 首先读取Excel表格

# 随机按行打乱Excel表格
from openpyxl import Workbook
from openpyxl import load_workbook
import random

# 读取文件
wb = load_workbook('data.xlsx')

  2. 打开当前工作簿

ws = wb.active

  3. 获取行数

ws.max_row

  4. 创建一个从1到最大行数的数字列表,并随机打乱列表,

   Python生成随机数的原理是梅森旋转算法,感兴趣的可以了解下

numbers = list(range(1, ws.max_row + 1))
random.shuffle(numbers)

  5. 遍历列表,根据每次随机数字选取一行,并复制到表格末尾

    for i in numbers:
        row = ws[i]
        r = []
        for cell in row:
            r.append(cell.value)
        ws.append(r)

  6. 删除原数据,保留复制的数据

ws.delete_rows(1, ws.max_row//2)

  7.遍历工作簿,对所有工作簿数据都进行打乱

for ws in wb:
    #执行打乱操作
  • 附上全代码

 

# 随机按行打乱Excel表格
from openpyxl import Workbook
from openpyxl import load_workbook
import random

# 读取文件
wb = load_workbook('data.xlsx')
# 显示工作表数量
print("---该文件共" + str(len(wb.sheetnames)) + "个工作表---")

def main():
    # 打乱所有工作簿
    for ws in wb:
        print("\n---开始打乱工作表[" + str(ws.title) + "]---")
        # 显示行数
        print("---行数:" + str(ws.max_row) + '---')
        
        random_data(ws)

    # 文件另存为data_random.xlsx
    wb.save('data_random.xlsx')
    print("\n---文件保存成功---")
    word = input("\n按下任意键退出")

def random_data(ws):
    """随机打乱数据"""
    print("---正在打乱数据---")
    numbers = list(range(1, ws.max_row + 1))

    # random()函数采用梅森旋转算法生成伪随机数
    random.shuffle(numbers)
    for i in numbers:
        row = ws[i]
        r = []
        for cell in row:
            r.append(cell.value)
        ws.append(r)

    ws.delete_rows(1, ws.max_row//2)

if __name__ == "__main__":
    main()

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM