1. 程式人生 > 實用技巧 >【python】pandas vs Excel (如何將資料寫入到Excel中)

【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嗎???? 好了,我們下篇再會!!!