⑴ python把excel第一列相同的分類
Python操作excel文件根據某一欄位將相同的類拆分。
需要安裝pandas,xlrd,openpyxl庫。
定義新列需要用到columns.tolist()函數,具體代碼如下:col_name=df.columns.tolistcol_name.insert(新列位置,'新列名稱')wb=df.reindex(columns=col_name)然後後面再接一行代碼用來定義新列的計算規則。
⑵ 關於Excle表格如何拆分
首先,打開需要拆分單元格的Excel表格。
⑶ Python操作Excel實現自動化報表
Python操作Excel實現自動化報表
安裝
python -m pip install xlrd xlwt xlutils。
基本用法
1.從指定文件路徑讀取excel表格,進行一定操作,然後保存到另一個excel文件:result.xlsx
import xlwt
import xlrd
from xlutils. import
import pandas as pd
from pandas import DataFrame,Series
import os
os.chdir('./')
# 從指定文件路徑讀取excel表格
df = pd.read_excel('D:/mypaper/data/data.xlsx')
# 查看df內容
# 根據age算出出生年份,增加一列
import datetime
import os
year = datetime.datetime.now().year#獲取當前系統時間對應的年份
df['birth'] = year-df['age']
df.to_excel('result.xlsx')#保存到當前工作目錄,可以用os.getcwd()查看
#查看下此時df的內容,可以看到已經生成了birth這一列。
2.單元格操作
# 定義方法:讀取指定目錄下Excel文件某個sheet單元格的值
def excel_read(file_path,table,x,y):
data = xlrd.open_workbook(file_path)
table = data.sheet_by_name(table)
return table.cell(y,x).value
# 定義方法:單元格值及樣式
write_obj_list = []
def concat_obj(cols,rows,value):
write_obj_list.append({'cols':cols,'rows':rows,'value':value,
'style':xlwt.easyxf('font: name 宋體,height 280;alignment: horiz centre')})
# 定義方法:合並單元格
def merge_unit(srows,erows,scols,ecols,value):
write_obj_list.append({'id':'merge','srows':srows,'erows':erows,'scols':scols,
'ecols':ecols,'value':value,'style':xlwt.easyxf('font: name 宋體,height 280;alignment: horiz centre')})
# 定義方法:更新excel
excel_update(file_path,write_obj_list,new_path):
old_excel = xlrd.open_workbook(file_path, formatting_info=True)
#管道作用
new_excel = (old_excel)
'''
通過get_sheet()獲取的sheet有write()方法
'''
sheet1 = new_excel.get_sheet(0)
'''
1代表是修改第幾個工作表裡,從0開始算是第一個。此處修改第一個工作表
'''
for item in write_obj_list:
if 'id' not in item.keys():
if 'style' in item.keys():
sheet1.write(item['rows'], item['cols'], item['value'],item['style'])
else:
sheet1.write(item['rows'], item['cols'], item['value'])
else:
if 'style' in item.keys():
sheet1.write_merge(item['srows'],item['erows'],item['scols'], item['ecols'], item['value'],item['style'])
else:
sheet1.write_merge(item['srows'],item['erows'],item['scols'], item['ecols'], item['value'])
'''
如果報錯 dict_items has no attributes sort
把syle源碼中--alist.sort() 修改為----> sorted(alist)
一共修改2次
'''
new_excel.save(file_path)
#參數詳解
# srows:合並的起始行數
# erows:合並的結束行數
# scols:合並的起始列數
# ecols:合並的結束列數
# value:合並單元格後的填充值
# style:合並後填充風格:
# font: name 宋體
# height 280;
# alignment: horiz centre
# ... 與excel操作基本保持一致
(注意:該方法僅僅是將需要直行的動作保存到一個list中,真正的動作還未執行,執行動作是發生在excel_update方法中)
最終調用excel_update方法,傳入每個單元格需要進行的操作和填充值的write_obj_list以及文件保存路徑file_path,就可以在當前工作目錄下生成想要的Excel結果文件。
注意:
1.write_obj_list支持用戶自定義
2.write_obj_list也可以是根據excel_read方法讀取現有待修改的excel文件(可以維持原有表格的格式)而生成
End
⑷ 用Python拆分EXCEL,一行一個表
EXCEL最多能有256個表吧。若能生成1000個表,也沒有使用價值。
想每一行單獨列印,可以用WORD的郵件功能。
⑸ Python帶格式拷貝excel表格(從A拷貝到B)
使用openpyxl包 從表A.xlsx 完全拷貝數據到表B.xlsx openpyxl這個包不支持xls格式的excel文件
如果A.xlsx中的數據有用到公式自動求和的,在讀取A.xlsx中的的數據的時候 需要
load_workbook(A.xlsx,data_only=True)這樣加第二個參數 只讀取數據否則讀出來的就是公式.
下面是重點如果A.xlsx中的表格帶有填充顏色 合並單元格字體格式 等等需要如下這樣做
myfile = A.xlsx
targFile = B.xlsx
wb = load_workbook(myfile,data_only=True)._sheets #原要拷貝單元格
wb2 = load_workbook(targFile) # 目標單元格
wr = wb[index]
ws = wb2._sheets[1]
# 兩個for循環遍歷整個excel的單元格內容
for i, row in enumerate(wr.iter_rows()):
for j, cell in enumerate(row):
ws.cell(row=i + 1, column=j + 1, value= cell.value) #拷貝數值
ws.cell(row=i + 1, column=j + 1).number_format=cell.number_format #拷數字格式
ws.cell(row=i + 1, column=j + 1).alignment = .(cell.alignment) #
ws.cell(row=i + 1, column=j + 1).font = .(cell.font) #拷貝字體
ws.cell(row=i + 1, column=j + 1).border = .(cell.border) #拷貝值
ws.cell(row=i + 1, column=j + 1).fill = .(cell.fill) #拷貝填充顏色
for merg in wr.merged_cells:
ws.merge_cells(str(merg)) #合並單元格
wb2.save(targFile)
這樣數據就能完美的從從A拷貝到B啦.格式樣式完全一樣.
但是 也有兩個我沒有攻克的問題 在這里說一下吧 希望有大佬能解決並告知在下 ,不勝感激
問題一 從表A中拷貝數據到表B以後 如果表B裡面也設置了對數據的公式計算,這個時候 如果不打開表B,直接再把表B裡面求和的數據 拷貝到表C的話 數值是拷貝不過去的.打開表C會發現沒有數值,我查了一些資料 好像是說 表B裡面的數 如果是像上面這樣拷貝過去然後通過公式直接計算的值 沒有保存上. 所以 要想把數值拷貝到C或者讀出來的話 ,需要手動打開表B然後,關閉的時候保存一下才可以.這是問題一. 因為我遇到了一個這樣的需求,需要連續拷貝從A拷到B,再把B裡面求和的數據拷到C.希望有大佬能夠指點一下
問題二就比較神奇了
我把表A裡面的數據拆分拷貝到了另外五個匯總的表格裡面,這五個其中有一個打開以後會報錯,顯示 excel文件格式錯誤.這五個表格在拷貝數據以前就已經存在了,那個時候打開都是沒有問題的,只有在拷貝完數據以後會報錯,我也不清楚具體的原因. 查了一些資料以後知道,excel表格其實是一種特殊的壓縮包,只要把後綴改成zip就可以打開這個壓縮文件,然後我找到報錯的那個文件,然後用這個報錯的文件和正常的文件裡面這個去做了對比,發現莫名其妙的多了一些東西,刪除掉以後再打開就正常了. 這也是我沒有解決的問題,希望有大佬能夠指點一二 具體的報錯 截圖 就是文章中附帶的截圖
⑹ Python怎麼在Excel中把一個單元格里的內容拆分提取
如果格式都是數字、名稱+空格這種模式,可以統一正則出來,('\d、\w+\s)
⑺ 如何用python3 將一個大的excel文件(.xlsx)分割為多個excel的文件,sheet 不變。以下是我的代碼:
我覺得你要處理數據的話最好用資料庫,把excel中的數據讀入到資料庫中再處理就很輕鬆了。用python本身支持的sqlite就夠了,才800多兆而已。
⑻ python處理excel完整版
**1.2.1 新建保存工作簿(覆蓋創建)
獲取當前活動工作表的:
以索引值方式獲取工作表:
以工作表名獲取: wb['工作表名'],注意,此表達方式為切片顯示,所以沒有成員提示。很少用
循環工作表:很好用,一般用sheetnames
獲取所有工作表名:wb.sheetnames
獲取指定工作表名
修改工作表名稱
新建工作表時的默認工作表名:
workbook.remove(工作表)
A1 表示法: 工作表['A1'] ,R1C1 表示法:工作表.cell(行號,列號)
2.工作表['起始行號': '結束行號']或者工作表['起始行號: 結束行號'],此方法是按行讀取的數據。
3.工作表['起始列號': '結束列號']或者工作表['起始列號: 結束列號'],
此方法是按列讀取的數據。
4.獲取(按行)指定工作表所有已用數據:
list(workbook.worksheets[索引值].values)
按行求和(方法 1)
按行求和(方法 )
按列統計平均值
按行獲取工作表使用區域數據:worksheet.rows
按列獲取工作表使用區域數據:worksheet.columns
獲取工作表中最小行號:worksheet.min_row
獲取工作表中最小列號:worksheet.min_column
獲取工作表中最大行號:worksheet.max_row
獲取工作表中最大列號:worksheet.max_column
獲取單元格的行號:cell.row
獲取單元格的列號:cell.column iter
方法獲取指定區域:
1.按行獲取指定工作表單元格區域:worksheet.iter_rows(……)
2.按列獲取指定工作表單元格區域:worksheet.iter_cols(……)
可以通過 min_row、min_col、max_col、max_row 這幾個參數進行單元格區域的控制
A1 表示法:工作表['A1']=值,R1C1 表示法:工作表.cell(行號,列號,值)
在最後一行寫入數據:工作表.append(列表)
1.10.2 實例應用(九九乘法表)
最後加一列寫優秀
⑼ Python處理Excel文件(csv, xls, xlsx)
Excel文件格式主要有csv,xlsx和xlsx,對於不同的格式,我們使用不同的包來進行處理。
其中, encoding='utf-8-sig' 是為了編碼正常可以正確顯示中文, spamreader 中的每一個 row 為list格式,可以循環取出每個單元格的值。
結果:
如果csv文件是數據類的,那麼使用 pandas 包讀寫數據會更方便。
結果:
參數:
結果:
參數:
Excel文件有三層對象:工作薄、工作表和三元格,分別對應 openpyxl 包中的workbook、sheet和cell。
注 : openpyxl 功能全面,還支持:合並單元格、數學運算、單元格格式、迭代器 ws.iter_rows() 操作等。
注 : xlrd 打開為只讀模式,不可修改。
結果:
結果: