【python】pandas vs Excel (如何將資料寫入到Excel中)
一,將DataFrame的資料存入Excel
註釋:.to_excel(路徑,引數) .同讀excel類似的是寫入excel呼叫的是to_excel的函式。
1. 建立一個DataFrame,通過字典的方式建立,每一個key作為一個Series列名,而values則作為Series的值
2. 通過to_excel函式寫入到一個Excel表中
3. 寫入時同時指定引數 sheet_name 指定sheet的名稱,index=Flase 隱藏index列,float_format="%.2f" 保留小數點2位,na_rep指定缺失值被替換的值
import pandas as pd df = pd.DataFrame({"商品名稱":["HuaWei Mate40 Pro","HuaWei 榮耀V30","小米 9 ","vovo mate 300"], "商品價格":[8700.456,35799.0678,2600,None]}) print(df) df.to_excel(R"C:\Users\Administrator\PycharmProjects\python_Basic\Pandas_to_Excel\20200721\output_files\output_file1.xlsx", sheet_name= "手機商品", index=False, #不保留index float_format="%.2f", #保留小數點2位 na_rep="空值") #如果有缺失值,可以通過na_rep的方式把缺失值替換成自定義的名字 print("Done!!")
二,將DataFrame的資料存入Excel的各個sheet中
註釋:1. 建立兩個DataFrame,通過字典的方式建立,每一個key作為一個Series列名,而values則作為Series的值
2. 通過with .ExcelWriter函式 as 別名 的方式將兩個DataFrame傳入不同的sheet中
3. 傳入資料之前,對於日期相關的資料通過datetime_format= "YYYY-MM-DD"等格式來輸出到Excel表中
import pandas as pd from datetime import datetime """ ExcelWriter的2個主要作用: 1. 可以讀取多個sheet的內容 2. 設定datetime的輸出格式 """ df01 = pd.DataFrame({ "商品名稱":["HuaWei Mate40 Pro","HuaWei 榮耀V30","小米 9 ","vovo mate 300"], "商品價格":[8700.456,35799.0678,2600,3789.567], "出售日期":[datetime(2020,1,1),datetime(2020,1,2),datetime(2020,1,3),datetime(2020,1,4)] }) df02 = pd.DataFrame({ "商品名稱":["HuaWei Mate40 Pro","HuaWei 榮耀V30","小米 9 ","vovo mate 300"], "商品價格":[8700.456,35799.0678,2600,3789.567], "出售日期":[datetime(2020,2,1),datetime(2020,2,2),datetime(2020,2,3),datetime(2020,2,4)] }) print(df01) print(df02) #將上述2個DateFrame存入Excel表中 #通過with ExcelWriter類來格式化含有日期的列,並把不同的DateFrame物件輸出到不同的sheet中 with pd.ExcelWriter(R"C:\Users\Administrator\PycharmProjects\untitled\Pandas_to_Excel\20200721\output_files\output_file3.xlsx", datetime_format="YYYY/MM/DD") as writer: df01.to_excel(writer,sheet_name="1月份銷量",index=False) df02.to_excel(writer,sheet_name="2月份銷量",index=False) print("Done!!!")
sheet1輸出內容結果
sheet2內容輸出結果
三,讀取總Excel表,並按照需求把資料分別儲存到另一個Excel不同的sheet中(這種場景會是我們日常用的最多的)
資料:請自行把資料儲存成.xlsx格式的檔案
班級 姓名 語文 數學 英語 總分 性別 考號 5 王英傑 81 89 72 242 女 2018001 3 陳鑫雨 87 88 85 260 女 2018002 3 朱瑩瑩 79 81 66 226 女 2018006 1 魏薇 73 59 54 186 女 2018010 5 朱潔 77 88 92 257 女 2018011 1 朱瑞麒 59 60 34 153 女 2018012 4 王靖雅 64 57 56 177 女 2018014 3 李芮瑤 69 28 42 139 女 2018018 2 密文芯 65 62 48 175 女 2018019 2 韋婷 72 73 40 185 女 2018020 5 李美輝 58 16 35 109 女 2018024 3 陳佳慧 57 47 37 141 女 2018026 1 黃慧婕 73 81 84 238 女 2018027 4 顧子晨 34 35 13 82 男 2018031 3 王任 62 68 44 174 男 2018037 4 胡博宇 69 80 63 212 男 2018047 2 趙奧傑 79 58 52 189 男 2018055 5 孫鵬 65 58 56 179 男 2018057 2 李欣欣 77.5 88 72 237.5 女 2018067 4 商雪寧 76 93 78 247 女 2018069 5 李美瑤 78.5 69 82 229.5 女 2018070 3 李泉霖 90.5 97 97 284.5 女 2018072 3 韓涵 79.5 64 67 210.5 女 2018074 3 王晶 76 89 69 234 女 2018076 4 李梓瞳 85.5 86 82 253.5 女 2018077 2 馬鳳嬌 82 89 89 260 女 2018083 1 張章 60 55 48 163 男 2018094 5 周子謙 77 74 75 226 男 2018106 1 沈政宇 51 71 27 149 男 2018108 2 張志航 71 86 67 224 男 2018110 5 公子豪 61 90 60 211 男 2018112 1 宋承澤 68 74 53 195 男 2018113 2 王顥軒 37 50 33 120 男 2018116 3 龐永琪 69 48 77 194 男 2018117 2 吳磊 56 33 42 131 男 2018118 4 李兆鴻 76 75 49 200 男 2018120 2 張藝琳 57 77 67 201 女 2018123 3 張藝馨 63 63 77 203 女 2018126 2 李銘羽 34 25 23 82 女 2018130 2 盧曉慧 64 74 70 208 女 2018133 4 周詩棋 78 94 67 239 女 2018138 3 尤馨悅 74 71 30 175 女 2018143 3 李珂迪 69 61 61 191 女 2018146 1 馬彥冰 77 72 52 201 女 2018148 5 趙宇鵬 72 88 80 240 男 2018155 2 吳文琦 75 97 82 254 男 2018161 2 馬憲榮 66 74 57 197 男 2018165 1 馬愷 61 83 72 216 男 2018166 1 王錦程 80 96 83 259 男 2018167 3 王茂丞 36 68 23 127 男 2018168 4 張利恆 58 74 64 196 男 2018172 5 宋皓翰 57 44 18 119 男 2018175 3 蔣潔妤 50 18 24 92 女 2018182 2 李敏琪 85 33 29 147 女 2018186 2 卞舒寧 82 69 88 239 女 2018189 4 劉若惜 55 44 45 144 女 2018192 1 閆瑾 74 64 64 202 女 2018196 1 王曉渝 45 12 28 85 女 2018198 4 蘇永遠 73 50 52 175 女 2018200 4 李坤璐 87 77 71 235 女 2018203 2 李嘉晨 54 63 46 163 男 2018211 3 張清祥 75 92 84 251 男 2018215 3 郭高旭 76 63 61 200 男 2018216 4 孫喆 34 59 9 102 男 2018224 4 高義傑 66 73 74 213 男 2018228 3 孫紫軒 78 90 72 240 男 2018234 5 趙天成 64 84 64 212 男 2018237 5 徐金珠 71 48 34 153 女 2018245 1 王浩然 79 86 69 234 女 2018246 4 孫浩然 52 42 26 120 女 2018254 1 徐菁 54 90 60 204 女 2018256 5 馬玥 26 8 4 38 女 2018258 2 聶晨 61 56 59 176 女 2018265 1 唐詩涵 83 87 83 253 女 2018266 1 諸葛祥雲 57 51 54 162 男 2018273 4 劉晨桐 74 87 65 226 男 2018275 1 薛智元 62.5 22 46 130.5 男 2018278 1 廉政宇 73 74 55 202 男 2018279 2 呂可樂 78 70 81 229 男 2018280 1 馬翔 77.5 78 72 227.5 男 2018281 3 王雲升 40 85 51 176 男 2018282 2 張俊博 56 71 39 166 男 2018283 4 徐人傑 67.5 83 84 234.5 男 2018285 5 宿曉碩 70 90 61 221 男 2018299 5 盧俊蓉 82.5 97 82 261.5 女 2018304 2 高詩茹 52.5 47 64 163.5 女 2018313 5 朱雪婷 54 69 33 156 女 2018314 3 王慧 55.5 48 36 139.5 女 2018315 2 楊慧 68.5 95 68 231.5 女 2018317 1 王安琪 67 56 67 190 女 2018320 2 張雨欣 62 64 42 168 女 2018325 4 曹一丹 76.5 78 67 221.5 女 2018326 5 祝欣月 73.5 57 51 181.5 女 2018328 2 張家溢 60 59 55 174 男 2018335 5 牛瑞旺 10 24 11 45 男 2018336 2 張智傑 79 91 80 250 男 2018337 4 丁文博 85 93 88 266 男 2018338 3 楊傑 63 92 83 238 男 2018339 1 邵鈺銘 73 91 56 220 男 2018341 1 朱昊宇 65 54 27 146 男 2018343 2 田楓玉 53 20 17 90 男 2018347 4 劉志浩 61 63 78 202 男 2018348 2 張家赫 62 83 69 214 男 2018349 3 鮑明祺 57 63 66 186 男 2018350 3 朱梓豪 54 87 70 211 男 2018351 3 付藝閣 64 66 20 150 男 2018354 5 於文傑 56 89 32 177 男 2018357 3 劉譯澤 70 84 67 221 女 2018366 3 高政 59 57 41 157 女 2018370 4 崔凱 63 22 31 116 女 2018374 4 孫瑜 46 60 42 148 女 2018376 4 葛世宇 62 83 39 184 女 2018377 1 郭逸翔 68 78 62 208 女 2018379 5 丁一航 39 11 18 68 女 2018381 4 陳宗想 71 42 34 147 男 2018395 4 倪羽軒 82 54 37 173 男 2018396 2 孫鵬 58 58 37 153 男 2018397 3 王裕超 75 64 78 217 男 2018401 1 馬振郡 74 58 49 181 男 2018402 3 王睿 78 80 69 227 男 2018403 1 彭俊億 67 83 48 198 男 2018408 5 羅博文 53 64 54 171 男 2018415 2 劉明鬆 51 86 43 180 男 2018416 4 寧洋 61 51 51 163 男 2018419 5 賀子凡 72 63 59 194 男 2018420 4 朱一諾 73 70 54 197 女 2018428 5 張藝馨 68 47 49 164 女 2018430 4 楊環宇 82.5 83 80 245.5 女 2018433 2 謝欣桐 76 71 65 212 女 2018436 2 王雅文 60 77 57 194 女 2018438 2 趙研 96 95 80 271 女 2018440 1 曹露馨 78 95 82 255 女 2018443 3 王一博 65.5 56 76 197.5 女 2018447 5 高一文 64 31 61 156 女 2018448 5 於群 77 71 66 214 女 2018450 4 殷鑫 28 45 46 119 男 2018455 1 鄭順文 70 75 73 218 男 2018456 5 李翔旭 40 35 55 130 男 2018460 1 許文澤 85 90 69 244 男 2018465 3 張恆 50 64 49 163 男 2018467 2 上官豫凱 77 88 56 221 男 2018469 5 趙建超 83 98 87 268 男 2018474 4 田翔 55 20 47 122 男 2018478 5 陳俊澎 63 36 43 142 男 2018479 4 李甲碩 62 48 65 175 男 2018497 4 房慶輝 71 85 90 246 男 2018498 4 張孝臣 56 17 32 105 男 2018501 2 穆存晟 54 40 21 115 男 2018511 1 李鵬宇 49 54 47 150 男 2018516 4 王天任 74 78 76 228 男 2018520 1 韓宗祥 54 49 40 143 男 2018530 3 邵珠軒 75 90 77 242 男 2018539 4 付森 60 75 56 191 男 2018540 2 魏曉穎 80 60 61 201 女 2018543 3 周姝含 60 65 64 189 女 2018544 2 郭美辰 82 74 64 220 女 2018545 5 孫卿慧 80 55 55 190 女 2018547 2 魏佳怡 74 53 57 184 女 2018548 5 邱軼姝 85 83 71 239 女 2018553 3 張靜茹 82 78 58 218 女 2018557 1 鬱慧 68 50 36 154 女 2018562 5 朱俁潔 70 82 27 179 女 2018567 3 闞耀 71 93 51 215 男 2018571 4 何浩楠 55 35 12 102 男 2018573 4 季佳豪 74 55 56 185 男 2018575 3 紀天圓 60 45 36 141 男 2018578 1 麻洪軒 80 87 73 240 男 2018580 3 王中源 39 20 11 70 男 2018582 2 蘇子淵 74 89 85 248 男 2018588 3 鄭信瑜 69 65 47 181 男 2018589 2 姚傑 80 72 41 193 男 2018592 2 彭嘉豪 29 29 33 91 男 2018593 3 晁子斌 64 45 21 130 男 2018596 1 李鎮宇 71 79 87 237 男 2018597 1 趙泓博 81 54 29 164 男 2018599 4 王琳 83.5 80 74 237.5 女 2018603 1 孫藝菲 64 59 39 162 女 2018610 4 薄淑婷 63 77 80 220 女 2018611 3 蘇一蘋 71 94 70 235 女 2018614 5 嶽子琪 62 80 78 220 女 2018617 2 周怡彤 73 73 57 203 女 2018623 4 常琬媛 62 48 34 144 女 2018626 5 徐浩哲 77 80 83 240 男 2018633 4 楊霖 74 97 90 261 男 2018638 5 王梓謙 74 92 79 245 男 2018643 3 韓林熹 65 38 38 141 男 2018645 5 趙一全 57 60 56 173 男 2018647 3 李旭 34 17 10 61 男 2018653 1 劉家豪 85 91 95 271 男 2018655 2 姜冠羽 72 88 79 239 男 2018656 3 陳休宇 86 68 79 233 男 2018658 1 王一涵 82 62 79 223 女 2018663 1 林紫凡 49 61 44 154 女 2018665 1 吳琳琳 67 40 37 144 女 2018666 3 姬莉 60 67 36 163 女 2018671 5 趙梓彤 76 79 42 197 女 2018674 5 張萌丹 83 73 82 238 女 2018675 2 李高玉 43 41 32 116 女 2018677 4 趙文馨 44 82 47 173 女 2018678 4 張路 81 94 43 218 女 2018679 1 李佳琳 74 84 75 233 女 2018680 3 夏子晟 71 38 41 150 女 2018683 5 孫子涵 64 85 60 209 女 2018686 5 王藝心 80 65 59 204 女 2018688 4 姜含青 81 70 57 208 女 2018690 5 孫嘉祥 70 85 20 175 男 2018691 2 李明澤 69 72 77 218 男 2018697 5 劉浩然 47 45 59 151 男 2018703 1 王真 32.5 20 27 79.5 男 2018705 1 高僑 53.5 73 53 179.5 男 2018706 5 王顥運 69.5 73 58 200.5 男 2018707 5 鬱章群 73.5 65 68 206.5 男 2018711 2 王寧 65 36 36 137 男 2018712 5 鄭金原 78.5 68 45 191.5 男 2018714 5 朱鵬宇 73 86 73 232 男 2018715 1 田峻赫 59 74 53 186 男 2018716 1 張忠慶 20 4 15 39 男 2018724 1 周星彤 52 48 34 134 女 2018727 2 曹書魁 47 21 22 90 男 2018730 5 楊帥 58 64 64 186 男 2018736 2 王卓 81 73 81 235 男 2018739 3 石子盈 86 74 87 247 女 2018741 1 王菲 80 74 76 230 女 2018742 3 王聰 59 75 69 203 男 2018743 4 鄭凱登 64 69 70 203 男 2018745 4 張瑜涵 75 72 42 189 男 2018746
需求:按照班級劃分,將資料儲存到不同的sheet中
注意:以下的格式是通過jupyter的框架寫的。如果您是用的.py的檔案請把輸出前加上print()。例如: print(df.head(10))
import pandas as pd df = pd.read_excel(R"C:\Users\Administrator\PycharmProjects\python_Basic\Pandas_to_Excel\20200721\source_file\按照班級分離檔案.xlsx", sheet_name= "Sheet1" ) df.head(10) #%% # 通過掩碼的方式指定條件,條件匹配則將資料存入變數 class1 = df[df["班級"] == 1] class2 = df[df["班級"] == 2] class3 = df[df["班級"] == 3] class4 = df[df["班級"] == 4] class5 = df[df["班級"] == 5] #%% with pd.ExcelWriter(R"C:\Users\Administrator\PycharmProjects\python_Basic\Pandas_to_Excel\20200721\source_file\output_result.xlsx") as writer: class1.to_excel(writer,sheet_name="班級1",index=False) class2.to_excel(writer,sheet_name="班級2",index=False) class3.to_excel(writer,sheet_name="班級3",index=False) class4.to_excel(writer,sheet_name="班級4",index=False) class5.to_excel(writer,sheet_name="班級5",index=False) print("Done!!!")
輸出結果:看sheets就可以看出已經成功建立了5個班級,我這裡就不一一截圖了.您可以自己跑一下上述指令碼,結果會把資料按照班級分別寫入到這5個sheet中。
重點:這裡巧妙了運用了pandas掩碼的用法. 例如:df["班級"] == 1,如果直接列印這個返回的是一串與行對應的布林值.為True則選中資料,Flase則忽略資料不選。這個是可以指定的
在這裡就不詳細說明了。後面的篇章中會仔細說明。總之通過這個方法,可以避免運用迴圈帶來的消耗 IO讀取資料。個人感覺這種方法比起迴圈遍歷來的更加輕鬆!!
上述的三個案例,可以簡單的演示瞭如何通過Pandas將資料儲存到一個Excel表中。當然不同的場景可以通過不同的方法來進行對Excel的讀寫。Pandas之所以強大,是因為對比VBA而言Pandas可呼叫的庫,類及函式方法實在太多了。而且對於資料的選取,增刪改查等都非常的方便。在後續的篇章中還可以通過pandas第三方庫對繪圖等進行更加強大的展示。所以你還選擇
不學pandas嗎???? 好了,我們下篇再會!!!