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