1. 程式人生 > 實用技巧 >python pandas 讀excel類

python pandas 讀excel類

import  pandas  as pd
'''特例說明
file1="a20201220.xlsx"
sheetname='Sheet1'
df=pd.read_excel(file1,sheetname,usecols="A:D")#讀取第A-D四列所有內容
df=pd.read_excel(file1,sheetname,usecols=[1,3])#讀取第1,第3列所有內容
df=pd.read_excel(file1,sheetname,usecols="A:B,D")#讀取第A 第B 第D三列所有內容
df=pd.read_excel(file1,sheetname,usecols="A:B,D",header=3,nrows=15)#讀取第A 第B 第D的第4行開始的連續15行內容
df=pd.read_excel(file1,sheetname,usecols="A:B,D",nrows=15)#讀取第A 第B 第D的第1行開始的連續15行內容
print(df.values)
''' class DoExcela: def do_alldata(self,filename,sheetname,head=None):#返回列表,列表元素是某行內容 df=pd.read_excel(filename,sheetname,header=head) lb=[] for i in df.values: lb.append(i) return lb def do_hangdata(self,filename,sheetname,hang,head=None):#指定行號,返回列表,列表元素是指定行的某列內容
df=pd.read_excel(filename,sheetname,header=head) lb=[] for i in df.values[hang]: lb.append(i) return lb def do_liexhdata(self,filename,sheetname,lie,head=None):#指定列序號,返回列表,列表元素是指定行的某列內容 df=pd.read_excel(filename,sheetname,header=head) lb
=[] for i in df[lie].values: lb.append(i) return lb def do_liemingdata(self,filename,sheetname,lie,head=None):#指定列名稱,返回列表,列表元素是指定行的某列內容 df=pd.read_excel(filename,sheetname) lb=[] for i in df[lie]: lb.append(i) return lb def do_danyuandata(self,file_name:str,sheet_name:str,hang_name:int,lie_name:int):#返回單元格的內容,型別隨資料變化 df=pd.read_excel(file_name,sheet_name,header=None)#從第0行讀取 data1=df.iloc[hang_name,lie_name] return data1 def do_sheetname(self,filename):#以列表形式返回所有工作表名稱 df=pd.read_excel(filename,sheet_name=None) return list(df) def do_sheetshu(self,filename):#以列表形式返回所有工作表名稱 df=pd.read_excel(filename,sheet_name=None) return len(list(df)) #下面的函式是讀取指定單元格區域的值存入列表 def do_quyudata(self,file_name:str,sheet_name:str,zsh_name:int,zsl_name:int,yxh_name:int,yxl_name:int): #變數依次為檔名(表名)、工作表名稱、左上行、左上列、右下行、右下列 df=pd.read_excel(file_name,sheet_name,header=None)#從第0行讀取 alldata=[]#定義一個裝所有資料的空列表 # 獲取行索引,如果設定header=None,這裡應該改為(1,df.shape[0]) for i in range(zsh_name-1,yxh_name): #Erowdata={}#定義一個裝每行資料的字典 for j in range(zsl_name,yxl_name):#獲取列索引 # df.columns[j]獲取第j列表頭,df.iloc[i,j]獲取第i行第j列資料 alldata.append(df.iloc[i,j]) return alldata def do_alldata1(self,file_name:str,sheet_name:str)->'返回一個列表巢狀字典': '''通過excel表格路徑和表單名字獲取表單完整資料,以列表內巢狀字典的方式返回''' # 檔案有表頭索引是從第二行開始為0,如果設定header=None,索引從 df=pd.read_excel(file_name,sheet_name)#讀取 alldata=[]#定義一個裝所有資料的空列表 # 獲取行索引,如果設定header=None,這裡應該改為(1,df.shape[0]) for i in range(df.shape[0]): rowdata={}#定義一個裝每行資料的字典 for j in range(df.shape[1]):#獲取列索引 # df.columns[j]獲取第j列表頭,df.iloc[i,j]獲取第i行第j列資料 rowdata[df.columns[j]]=df.iloc[i,j] alldata.append(rowdata) # print(alldata) return alldata def do_liedata(self,file_name:str,sheet_name:str,lie_name:int)->'返回一個列表巢狀字典': '''通過excel表格路徑和表單名字獲取表單完整資料,以列表內巢狀字典的方式返回''' # 檔案有表頭索引是從第二行開始為0,如果設定header=None,索引從 df=pd.read_excel(file_name,sheet_name,header=None)#從第一行開始讀取 #df=pd.read_excel(file_name,sheet_name)#從第二行開始讀取 alldata=[]#定義一個裝所有資料的空列表 # 獲取行索引,如果設定header=None,這裡應該改為(1,df.shape[0] rowdata=[]#定義一個裝每行資料的字典 for i in range(df.shape[0]): rowdata.append(df.iloc[i,lie_name]) # print(alldata) return rowdata def do_hangdata1(self,file_name:str,sheet_name:str,hang_name:int)->'返回一個列表巢狀字典': '''通過excel表格路徑和表單名字獲取表單完整資料,以列表內巢狀字典的方式返回''' # 檔案有表頭索引是從第二行開始為0,如果設定header=None,索引從 df=pd.read_excel(file_name,sheet_name,header=None)#從第0行讀取 #df=pd.read_excel(file_name,sheet_name)#從第一行讀取 alldata=[]#定義一個裝所有資料的空列表 # 獲取行索引,如果設定header=None,這裡應該改為(1,df.shape[0] rowdata=[]#定義一個裝每行資料的字典 for i in range(df.shape[1]): rowdata.append(df.iloc[hang_name,i]) # print(alldata) return rowdata #下面的函式是讀取指定單元格區域的值存入字典:鍵是顯示列的順序,值是單元格的值 def do_quyudatazj(self,file_name:str,sheet_name:str,zsh_name:int,zsl_name:int,yxh_name:int,yxl_name:int): #變數依次為檔名(表名)、工作表名稱、左上行、左上列、右下行、右下列 df=pd.read_excel(file_name,sheet_name,header=None)#從第0行讀取 alldata=[]#定義一個裝所有資料的空列表 # 獲取行索引,如果設定header=None,這裡應該改為(1,df.shape[0]) for i in range(zsh_name-1,yxh_name): rowdata={}#定義一個裝每行資料的字典 for j in range(zsl_name,yxl_name):#獲取列索引 # df.columns[j]獲取第j列表頭,df.iloc[i,j]獲取第i行第j列資料 rowdata[df.columns[j]]=df.iloc[i,j] alldata.append(rowdata) return alldata #openpyxl讀取excel from openpyxl import load_workbook class DoExcel: def get_data(self, file_name, sheet_name): wb = load_workbook(file_name) # linux路徑 sheet = wb[sheet_name] test_data = [] for i in range(2, sheet.max_row + 1): row_data = {} for j in range(1, sheet.max_column + 1): row_data[sheet.cell(1, j).value] = sheet.cell(i, j).value test_data.append(row_data) return test_data file1="a20201220.xlsx" af=DoExcela() all=af.do_alldata1(file_name=file1,sheet_name="Sheet1") lie=af.do_liedata(file_name=file1,sheet_name="Sheet1",lie_name=0) hang=af.do_hangdata1(file_name=file1,sheet_name="Sheet1",hang_name=0) danyuan=af.do_danyuandata(file_name=file1,sheet_name="Sheet1",hang_name=0,lie_name=3) quyu=af.do_quyudata(file_name=file1,sheet_name="Sheet1",zsh_name=1,zsl_name=1,yxh_name=4,yxl_name=4) print(type(hang)) quyu1=af.do_quyudatazj(file_name=file1,sheet_name="Sheet1",zsh_name=1,zsl_name=1,yxh_name=4,yxl_name=4) for i in hang: print(type(i)) break print(danyuan) for i in quyu: print("quyu",i) for i in quyu1: print("quyu1",i) print("單行") for i in hang: print(i) #break hang1=af.do_hangdata(file1,"Sheet1",0) print("第0行",hang1,type(hang1)) sheet1=af.do_sheetname(file1) print(sheet1) sheet2=af.do_sheetshu(file1) print(sheet2) all1=af.do_alldata(file1,"Sheet1") print(all1,type(all1)) lie1=af.do_liexhdata(file1,"Sheet1",0) print(lie1,type(lie1)) dany=af.do_danyuandata(file1,"Sheet1",2,3) print(dany,type(dany))