12.pandas將二維數組寫入excel中


  1 # encoding:utf-8
  2 
  3 import pandas as pd
  4 from openpyxl import load_workbook
  5 
  6 '''
  7 本案例獲取所有符合的列數據
  8 去除了每個欄位的空格
  9 去除了空行數據
 10 去除了第一列為空的整行數據
 11 多個sheet
 12 
 13 對多個sheet數據整合在一個sheet中
 14 
 15 對整合在一個sheet中的數據只獲取想要的列
 16 
 17 獲取對應行對應列的數據寫到excel中
 18 即第一列與后面每一列一一對應放入到新的一行中
 19 組成一個2維數組,寫入倒新的EXCEL中
 20 '''
 21 
 22 class OpenMyXLS():
 23     def __init__(self, filepath):
 24         self.filepath = filepath
 25         self.openxls()
 26 
 27     def openxls(self):
 28         '''獲取第一個sheet的數據'''
 29         df = pd.read_excel(self.filepath, sheet_name=0)
 30         '''獲取行數列數'''
 31         hanglie = df.shape
 32         hang = hanglie[0]
 33         lie = hanglie[1]
 34         print(hanglie)
 35 
 36         '''將第i行第j列的值加到excel中,組成只有兩列的數據'''
 37         tofilepath = "../HSGtotest81_zh2_dange.xlsx"
 38         result2 = self.get8170lists(df, hang, lie)
 39         self.writerexcel(tofilepath,result2)
 40 
 41     '''將二維數據寫入excel中'''
 42     def writerexcel(self, tofilepath, result2):
 43         writer = pd.ExcelWriter(tofilepath)
 44         df = pd.DataFrame(result2)
 45         df.to_excel(writer, sheet_name="allhsgmlb", index=False)
 46         writer.save()
 47         writer.close()
 48 
 49     '''獲取81跟70配對,組合成2維數組'''
 50     def get8170lists(self, df, hang, lie):
 51         n = 0
 52         m = 1
 53         h_list = []
 54         h_lists = []
 55         while n < hang:
 56             while m < lie:
 57                 valueij = df.values[n, 0]
 58                 h_list.append(valueij)
 59 
 60                 valueij = df.values[n, m]
 61                 h_list.append(valueij)
 62                 # print(h_list)
 63 
 64                 h_lists.append(h_list)
 65                 print(h_lists)
 66                 h_list = []
 67                 m += 1
 68             n += 1
 69             m = 1
 70         return  h_lists
 71 
 72     '''獲取excel中所有sheet的名稱'''
 73     def getSheetNames(self, filepath):
 74         df = pd.read_excel(filepath, sheet_name=None)
 75         print("所有的sheet名稱:")
 76         sheetNameList = list(df)
 77         return sheetNameList
 78 
 79     '''根據sheet名稱獲取對應列名的數據,寫入新的excel中'''
 80     def foundtopnamedata(self, sheetNameList, file1):
 81         k = 0
 82         writer = pd.ExcelWriter(file1)
 83         while k < len(sheetNameList):
 84             sheetName = sheetNameList[k]
 85             print(sheetName)
 86             df = pd.read_excel(self.filepath, sheet_name=sheetName)
 87             print("獲取表頭")
 88             topNames = (df.keys()).values
 89             print(topNames)
 90             print("查找是否有81BOM列")
 91             findArr = self.returnFiindHSG(topNames)
 92             # findArr = self.returnFiindMLB(topNames)
 93             print("整合后的表頭數據")
 94             print(findArr)
 95 
 96             if findArr:
 97                 print("獲取對應列的所有數據")
 98                 d = self.returnDict(findArr, df)
 99                 todf = pd.DataFrame(d)
100                 print("刪除空行")
101                 todf = todf.dropna(how='all')
102                 print("刪除81BOM列中有nan的行")
103                 todf = todf.dropna(subset='81BOM')
104                 todf.to_excel(writer, sheet_name=sheetName, index=False)
105             else:
106                 print("沒有找到想要的列表頭")
107             k += 1
108         writer.save()
109         writer.close()
110         print("創建excel OK!!!")
111 
112     '''整合所有sheet放在第一個sheet中'''
113     def zhengheALLsheet(self, readfilepath, tofilepath1, tofilepath2):
114         writer1 = pd.ExcelWriter(tofilepath1)
115         writer2 = pd.ExcelWriter(tofilepath2)
116 
117         sheetNameList = self.getSheetNames(readfilepath)
118         print(len(sheetNameList))
119 
120         k = 0
121         frames = []
122         while k < len(sheetNameList):
123             sheetName = sheetNameList[k]
124             print(sheetName)
125             df1 = pd.read_excel(readfilepath, sheet_name=sheetName)
126             #print(df1)
127             frames.append(df1)
128             k += 1
129         print(frames)
130 
131         result1 = pd.concat(frames, keys=sheetNameList)
132         result1.to_excel(writer1, sheet_name="allhsgmlb")
133         writer1.save()
134         writer1.close()
135 
136         result2 = pd.concat(frames)
137         result2.to_excel(writer2, sheet_name="allhsgmlb", index=False)
138         writer2.save()
139         writer2.close()
140         print("數據整合到一個sheet中成功!")
141 
142     '''去除重復行的數據'''
143     def qcfxls(self, readfilepath, sheetNameList, tofilepath):
144         writer = pd.ExcelWriter(tofilepath)
145         # 讀取excel中的數據
146         j = 0
147         while j < len(sheetNameList):
148             sheetName = sheetNameList[j]
149             data = pd.DataFrame(pd.read_excel(readfilepath, sheetName))
150             # 查看獲取的數據
151             #print(data)
152             # 查看去除重復行的數據
153             no_re_row = data.drop_duplicates()
154             print(no_re_row)
155             # 將去除重復行的數據輸出到excel表中
156             no_re_row.to_excel(writer, sheet_name=sheetName, index=False)
157             j +=1
158         writer.save()
159         writer.close()
160         print("去除重復數據OK")
161 
162     '''返回插入EXCEL數據的字典形式'''
163     def returnDict(self, findArr, df):
164         i = 0
165         d = {}
166         while i < len(findArr):
167             allData1 = df.loc[:, findArr[i]].values
168             allData1a = self.qukongge(allData1)
169             d[findArr[i]] = allData1a
170             i += 1
171         return d
172 
173     '''返回符合要求的表頭'''
174     def returnFiindMLB(self, topNames):
175         findArr = []
176         for topName in topNames:
177             if topName == '81BOM':
178                 findArr.append(topName)
179                 print(findArr)
180             if '70 MLB Bin' in topName:
181                 findArr.append(topName)
182                 print(findArr)
183         return findArr
184 
185     '''返回符合要求的表頭'''
186     def returnFiindHSG(self, topNames):
187         findArr = []
188         for topName in topNames:
189             if topName == '81BOM':
190                 findArr.append(topName)
191                 print(findArr)
192             if '70 HSG Bin' in topName:
193                 findArr.append(topName)
194                 print(findArr)
195         return findArr
196 
197     '''返回符合要求的表頭'''
198     def returnFiindAll(self, topNames):
199         findArr = []
200         for topName in topNames:
201             if topName == '81BOM':
202                 findArr.append(topName)
203                 print(findArr)
204             if '70 HSG Bin' in topName:
205                 findArr.append(topName)
206                 print(findArr)
207             if '70 MLB Bin' in topName:
208                 findArr.append(topName)
209                 print(findArr)
210         return findArr
211 
212     '''去取字符串左右空格'''
213     def qukongge(self, lieDatas):
214         allData_strip = []
215         for allData in lieDatas:
216             if isinstance(allData, str):
217                 # print(allData.strip())
218                 allData_strip.append(allData.strip())
219             else:
220                 # print(allData)
221                 allData_strip.append(allData)
222         return allData_strip
223 
224 
225 if __name__ == '__main__':
226     filepath = '../HSGtotest81_zh2.xlsx'
227     oxl = OpenMyXLS(filepath)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM