因做數學建模比賽,需要打亂訓練數據,於是用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()
