zoukankan      html  css  js  c++  java
  • 【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:UsersAdministratorPycharmProjectspython_BasicPandas_to_Excel20200721output_filesoutput_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:UsersAdministratorPycharmProjectsuntitledPandas_to_Excel20200721output_filesoutput_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:UsersAdministratorPycharmProjectspython_BasicPandas_to_Excel20200721source_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:UsersAdministratorPycharmProjectspython_BasicPandas_to_Excel20200721source_fileoutput_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吗???? 好了,我们下篇再会!!!

  • 相关阅读:
    Flesch Reading Ease(模拟)
    实验一:词法分析设计
    java—容器学习笔记
    [转载]马士兵Java视频教程 —— 学习顺序
    Java的安装过程
    编程之美初赛第一场
    RCC 2014 Warmup (Div. 2)
    ural 1017. Staircases(dp)
    ural 1012. K-based Numbers. Version 2(大数dp)
    ural 1009. K-based Numbers(简单dp)
  • 原文地址:https://www.cnblogs.com/liupengpengg/p/13391986.html
Copyright © 2011-2022 走看看