1.Excel

1.1 Excel导入

read_excel()

  1. pandas.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False, dtype=None,
    engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None,
    keep_default_na=True, verbose=False, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0,
    convert_float=True, mangle_dupe_cols=True, **kwds)

read_excel()方法使用Python的xlrd模块来读取Excel 2003(.xls)版的文件,而Excel 2007+ (.xlsx)版本的是用xlrd或者openpyxl模块来读取的。to_excel()方法则是用来把DataFrame数据存储为Excel格式.。(标红参数为常用参数)

普通导入

导入 Excel 数据主要使用到的方法是 Pandas 中的 read_excel() 。

在进行导入操作的时候,要注意文件路径,这里的文件路径可以使用相对路径也可以使用绝对路径,但是不管哪种路径最基本的是要写对。

  1. import pandas as pd
  2.  
  3. df = pd.read_excel("result_data.xlsx")# 相对路径
  4. print(df)
  5.  
  6. # 输出内容
  7. plantform read_num fans_num rank_num like_num create_date
  8. 0 cnblog 215 0 118 0 2019-11-23 23:00:10
  9. 1 juejin 177 0 -2 1 2019-11-23 23:00:03
  10. 2 csdn 1652 69 0 24 2019-11-23 23:00:02
  11. 3 cnblog 650 3 191 0 2019-11-22 23:00:15
  12. 4 juejin 272 3 -23 1 2019-11-22 23:00:02
  13. .. ... ... ... ... ... ...
  14. 403 juejin 212 0 -1 2 2020-02-20 23:00:02
  15. 404 csdn 1602 1 0 1 2020-02-20 23:00:01
  16. 405 cnblog 19 0 41 0 2020-02-21 23:00:05
  17. 406 juejin 125 1 -4 0 2020-02-21 23:00:02
  18. 407 csdn 1475 8 0 3 2020-02-21 23:00:02
  19.  
  20. [408 rows x 6 columns]

Windows 的操作系统,文件路径默认是使用 \ ,如 D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx ,我们在直接使用 Windows 的文件路径的时候需要在前面增加一个 r (转义符)避免路径中的 \ 被转义,如下:

  1. import pandas as pd
  2. df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx")
  3. #df = pd.read_excel("D:\\Development\\Projects\\python-learning\\python-data-analysis\\pandas-demo\\result_data.xlsx") 也可以这样
  4. print(df)
  5.  
  6. # 输出内容
  7. plantform read_num fans_num rank_num like_num create_date
  8. 0 cnblog 215 0 118 0 2019-11-23 23:00:10
  9. 1 juejin 177 0 -2 1 2019-11-23 23:00:03
  10. 2 csdn 1652 69 0 24 2019-11-23 23:00:02
  11. 3 cnblog 650 3 191 0 2019-11-22 23:00:15
  12. 4 juejin 272 3 -23 1 2019-11-22 23:00:02
  13. .. ... ... ... ... ... ...
  14. 403 juejin 212 0 -1 2 2020-02-20 23:00:02
  15. 404 csdn 1602 1 0 1 2020-02-20 23:00:01
  16. 405 cnblog 19 0 41 0 2020-02-21 23:00:05
  17. 406 juejin 125 1 -4 0 2020-02-21 23:00:02
  18. 407 csdn 1475 8 0 3 2020-02-21 23:00:02
  19.  
  20. [408 rows x 6 columns]

指定导入 Sheet

我们在使用 Excel 导入的时候,除了可以指定文件路径,还可以选择导入的 Sheet

在设置 Sheet 的时候,我们使用参数 sheet_name 来完成,示例如下:

  1. import pandas as pd
  2.  
  3. df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name='result_data')
  4. print(df)
  5.  
  6. # 输出结果
  7. plantform read_num fans_num rank_num like_num create_date
  8. 0 cnblog 215 0 118 0 2019-11-23 23:00:10
  9. 1 juejin 177 0 -2 1 2019-11-23 23:00:03
  10. 2 csdn 1652 69 0 24 2019-11-23 23:00:02
  11. 3 cnblog 650 3 191 0 2019-11-22 23:00:15
  12. 4 juejin 272 3 -23 1 2019-11-22 23:00:02
  13. .. ... ... ... ... ... ...
  14. 403 juejin 212 0 -1 2 2020-02-20 23:00:02
  15. 404 csdn 1602 1 0 1 2020-02-20 23:00:01
  16. 405 cnblog 19 0 41 0 2020-02-21 23:00:05
  17. 406 juejin 125 1 -4 0 2020-02-21 23:00:02
  18. 407 csdn 1475 8 0 3 2020-02-21 23:00:02
  19.  
  20. [408 rows x 6 columns]

如果我们要使用一个完全不存在的 Sheet 名称会发生什么事情呢?例如我们将上面的 sheet_name 修改为 aaa ,来看下:

  1. import pandas as pd
  2.  
  3. df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name='aaa')
  4. print(df)
  5.  
  6. # 输出结果
  7. Traceback (most recent call last):
  8. File "C:\Users\inwsy\AppData\Local\Programs\Python\Python37\lib\site-packages\xlrd\book.py", line 474, in sheet_by_name
  9. sheetx = self._sheet_names.index(sheet_name)
  10. ValueError: 'aaa' is not in list
  11.  
  12. During handling of the above exception, another exception occurred:

可以看到这里抛出了 ValueError 的异常,并且提示 aaa 不在列表中。

在指定 Sheet 名称的时候除了可以使用 Sheet 的具体名称,还可以使用 Sheet 的顺序,需要注意这个顺序开头是从 0 开始的。

  1. import pandas as pd
  2.  
  3. df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0)
  4. print(df)
  5.  
  6. # 输出结果
  7. plantform read_num fans_num rank_num like_num create_date
  8. 0 cnblog 215 0 118 0 2019-11-23 23:00:10
  9. 1 juejin 177 0 -2 1 2019-11-23 23:00:03
  10. 2 csdn 1652 69 0 24 2019-11-23 23:00:02
  11. 3 cnblog 650 3 191 0 2019-11-22 23:00:15
  12. 4 juejin 272 3 -23 1 2019-11-22 23:00:02
  13. .. ... ... ... ... ... ...
  14. 403 juejin 212 0 -1 2 2020-02-20 23:00:02
  15. 404 csdn 1602 1 0 1 2020-02-20 23:00:01
  16. 405 cnblog 19 0 41 0 2020-02-21 23:00:05
  17. 406 juejin 125 1 -4 0 2020-02-21 23:00:02
  18. 407 csdn 1475 8 0 3 2020-02-21 23:00:02
  19.  
  20. [408 rows x 6 columns]

指定导入行索引

我们在导入文件的时候,行索引默认是会使用从 0 开始的默认索引,如果对行索引有需求的话,可以使用 index_col 参数来设置行索引。

比如我们现在设置 create_date 这个参数作为行索引,注意参数起始从 0 开始:

  1. import pandas as pd
  2.  
  3. df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, index_col=5)
  4. print(df)
  5.  
  6. # 输出结果
  7. plantform read_num fans_num rank_num like_num
  8. create_date
  9. 2019-11-23 23:00:10 cnblog 215 0 118 0
  10. 2019-11-23 23:00:03 juejin 177 0 -2 1
  11. 2019-11-23 23:00:02 csdn 1652 69 0 24
  12. 2019-11-22 23:00:15 cnblog 650 3 191 0
  13. 2019-11-22 23:00:02 juejin 272 3 -23 1
  14. ... ... ... ... ... ...
  15. 2020-02-20 23:00:02 juejin 212 0 -1 2
  16. 2020-02-20 23:00:01 csdn 1602 1 0 1
  17. 2020-02-21 23:00:05 cnblog 19 0 41 0
  18. 2020-02-21 23:00:02 juejin 125 1 -4 0
  19. 2020-02-21 23:00:02 csdn 1475 8 0 3
  20.  
  21. [408 rows x 5 columns]

指定导入列索引

同行索引一样,默认也是采用源数据的第一行作为列索引,同样,我们可以通过 header 进行列索引的设置, header 的默认参数为 0 ,也就是第一行,自定义可以使用其他行,将行号作为参数传入即可,我们演示一下使用第二行作为索引:

  1. import pandas as pd
  2.  
  3. df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, header=1)
  4. print(df)
  5.  
  6. # 输出结果
  7. cnblog 215 0 118 0.1 2019-11-23 23:00:10
  8. 0 juejin 177 0 -2 1 2019-11-23 23:00:03
  9. 1 csdn 1652 69 0 24 2019-11-23 23:00:02
  10. 2 cnblog 650 3 191 0 2019-11-22 23:00:15
  11. 3 juejin 272 3 -23 1 2019-11-22 23:00:02
  12. 4 csdn 2202 129 0 37 2019-11-22 23:00:01
  13. .. ... ... ... ... ... ...
  14. 402 juejin 212 0 -1 2 2020-02-20 23:00:02
  15. 403 csdn 1602 1 0 1 2020-02-20 23:00:01
  16. 404 cnblog 19 0 41 0 2020-02-21 23:00:05
  17. 405 juejin 125 1 -4 0 2020-02-21 23:00:02
  18. 406 csdn 1475 8 0 3 2020-02-21 23:00:02
  19.  
  20. [407 rows x 6 columns]

指定导入行数

有时候,如果我们只需要了解一下这个文件中有些什么数据,那么我们就不需要导入所有的数据,可以使用 nrows 来指定导入的行数,这里我们选择导入 Excel 的前 100 行:

  1. import pandas as pd
  2.  
  3. df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, nrows=100)
  4. print(df)
  5.  
  6. # 输出结果
  7. plantform read_num fans_num rank_num like_num create_date
  8. 0 cnblog 215 0 118 0 2019-11-23 23:00:10
  9. 1 juejin 177 0 -2 1 2019-11-23 23:00:03
  10. 2 csdn 1652 69 0 24 2019-11-23 23:00:02
  11. 3 cnblog 650 3 191 0 2019-11-22 23:00:15
  12. 4 juejin 272 3 -23 1 2019-11-22 23:00:02
  13. .. ... ... ... ... ... ...
  14. 95 csdn 1492 88 0 13 2019-10-23 23:51:37
  15. 96 cnblog 1338 2 219 0 2019-10-22 23:33:33
  16. 97 juejin 204 1 -6 6 2019-10-22 23:18:19
  17. 98 csdn 1064 61 7094 18 2019-10-22 23:18:08
  18. 99 cnblog -493 1 69 0 2019-10-21 22:38:32
  19.  
  20. [100 rows x 6 columns]

从结果的数据统计,可以看到我们成功的导入了前 100 行的数据,虽然行索引只有 99 ,是因为么我们 Excel 的头也占了一行。

指定导入列

有时候,我们的 Excel 中的列太多了,而我们处理的数据又不需要那么多列的时候,我们可以使用 usecols 来指定我们需要导入的列

  1. import pandas as pd
  2.  
  3. df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, usecols=[0, 1, 2])
  4. print(df)
  5.  
  6. # 输出结果
  7. plantform read_num fans_num
  8. 0 cnblog 215 0
  9. 1 juejin 177 0
  10. 2 csdn 1652 69
  11. 3 cnblog 650 3
  12. 4 juejin 272 3
  13. .. ... ... ...
  14. 403 juejin 212 0
  15. 404 csdn 1602 1
  16. 405 cnblog 19 0
  17. 406 juejin 125 1
  18. 407 csdn 1475 8
  19.  
  20. [408 rows x 3 columns]

注意这里的 usecols 的参数是一个数组,表示我们将要导入的列。

1.2 Excel导出

在做数据导出前,我们需要现有一份 DataFrame 数据,这里的数据小编偷懒,就直接读取之前示例中的 Excel 了,当然这么做并没有什么意义,仅用来演示导出数据。

在 Pandas 中导出 Excel 的时候,需要使用到的方法是 to_excel() 方法,在导出 Excel 文件的时候,一定要写对文件路径,我们在前面的文章中有介绍过文件路径的书写方法,直接上示例:

  1. import pandas as pd
  2.  
  3. # 数据读取
  4. df = pd.read_excel("table_join_exp.xlsx", sheet_name='Sheet1')
  5.  
  6. # 数据导出
  7. df.to_excel(excel_writer=r'D:\Development\Projects\demo.xlsx')

我们来看下 to_excel() 这个方法的语法:DataFrame.to_excel(self, excel_writer, sheet_name='Sheet1', na_rep='', float_format=None,

  1. columns=None, header=True, index=True, index_label=None,
    startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf',
    verbose=True, freeze_panes=None) None

to_excel() 这个方法中的参数还是比较多的,我们挑几个常用的介绍一下:

  • excel_writer :文件路径或现有的ExcelWriter
  • sheet_name :字符串,默认是 “Sheet1”
  • float_format :格式化浮点数的字符串
  • header :写出列名。如果给定字符串列表,则假定它是列名称的别名。
  • index :写索引
  • columns :设置要导出的列
  • encoding :编码格式,一般我们选择 'utf-8' 。
  • na_rep :缺失值处理
  • inf_rep :无穷值的处理

接下来看示例,这个示例小编会尽量写得复杂一点,把我们上面的属性尽可能的都用上,并且标注好注释:

  1. df.to_excel(excel_writer=r'D:\Development\Projects\demo.xlsx',
  2. sheet_name='测试文档', # 创建 sheet 名称
  3. index=False, # 设置索引不显示
  4. columns=['编号', '姓名'], # 设置要导出的列
  5. encoding='utf-8', # 设置编码格式
  6. na_rep='', # 缺失值处理
  7. inf_rep='inf' # 无穷值处理
  8. )

示例代码与文件 https://github.com/meteor1993/python-learning/tree/master/python-data-analysis/pandas-demo

数据可视化基础专题(二):Pandas基础(一) excel导入与导出的更多相关文章

  1. HTML5大数据可视化效果(二)可交互地铁线路图

    前言 最近特别忙,承蒙大伙关照,3D机房的项目一个接着一个,领了一帮小弟,搞搞传帮带,乌飞兔走,转眼已经菊黄蟹肥……有个小弟很不错,勤奋好学,很快就把API都摸透了,自己折腾着做了个HTML5的魔都的 ...

  2. [原创.数据可视化系列之二]使用cesium三维地图展示美国全球军事基地分布

    基于浏览器的三维地图还算是一个比较高冷的东西,最主要的技术难点是如何在浏览器上 多快好省 的显示三维数据,很遗憾,还真的没有太好的的方案,只能说还有可行的方案. 很久之前用过skyline,使用CS居 ...

  3. JavaScript数据可视化编程学习(一)Flotr2,包含简单的,柱状图,折线图,饼图,散点图

    一.基础柱状图 二.基础的折线图 三.基础的饼图 四.基础的散点图 一.基础柱状图 如果你还没有想好你的数据用什么类型的图表来展示你的数据,你应该首先考虑是否可以做成柱状图.柱状图可以表示数据的变化过 ...

  4. 前端er必须掌握的数据可视化技术

    又是一月结束,打工人准时准点的汇报工作如期和大家见面啦.提到汇报,必不可少的一部分就是数据的汇总.分析. 作为一名合格的社会人,我们每天都在工作.生活.学习中和数字打交道.小到量化的工作内容,大到具体 ...

  5. PHP导出excel文件,第二步先实现自写二维数组加入模板excel文件后导出

    今天主要研究数据加入EXCEL并导出的问题,先不从数据库提取数据导出,自己先写一个二维数组,然后遍历二维数组写入excel模板中导出,首先根据模板excel的内容书写对应的二维数组 $arr=arra ...

  6. 数据可视化基础专题(三):Pandas基础(二) csv导入与导出

    1.csv导入 1.1 csv导入 .read_csv()函数 pandas.read_csv(filepath_or_buffer: Union[str, pathlib.Path, IO[~Any ...

  7. 数据可视化-svg入门基础(二)

    接上一篇:数据可视化-svg入门基础(一),基础一主要是介绍了svg概念,元素样式设置等. svg是(scalable vector graphic)伸缩矢量图像. 一.目录 (1)图形元素 (2)文 ...

  8. 数据可视化之powerBI基础(十二)PowerBI导入Excel数据有哪几种方式?

    https://zhuanlan.zhihu.com/p/64999937 Excel作为使用最频繁.应用最广泛.用户最庞大的数据处理工具,当然也应该是PowerBI最常用的数据获取方式,本文介绍一下 ...

  9. Python数据可视化基础讲解

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:爱数据学习社 首先,要知道我们用哪些库来画图? matplotlib ...

随机推荐

  1. jQuery中ajax 跳入error的原因总结

    一个标准的jquery的ajax代码: $.ajax({ type: 'POST', url: 'getSecondClassification', data: {"sort2": ...

  2. @bzoj - 5104@ Fib数列

    目录 @description@ @solution@ @accepted code@ @details@ @description@ Fib数列为1,1,2,3,5,8... 求在Mod10^9+9 ...

  3. Spring Boot入门系列(十八)整合mybatis,使用注解的方式实现增删改查

    之前介绍了Spring Boot 整合mybatis 使用xml配置的方式实现增删改查,还介绍了自定义mapper 实现复杂多表关联查询.虽然目前 mybatis 使用xml 配置的方式 已经极大减轻 ...

  4. Docker中使用ElasticSearch

    安装Docker yum install docker //安装完成以后,可以查看一下docker的版本 docker -v //Docker version 1.13.1, build 64e998 ...

  5. 分享2个近期遇到的MySQL数据库的BUG案例

    近一个月处理历史数据问题时,居然连续遇到了2个MySQL BUG,分享给大家一下,也欢迎指正是否有问题. BUG1: 数据库版本:  MySQL5.7.25 - 28 操作系统: Centos 7.7 ...

  6. Windows安装C的编译环境

    对于java开发者来说安装C的编译环境不是非常熟悉,因此本文对C的安装环境进行介绍以及windows编译Redis和Zookeeper的过程.MinGW主要用于按照gcc.make等环境,cywin用 ...

  7. JavaWeb网上图书商城完整项目--day02-26.查询所有分类功能之DAO层实现

    我们按照表示的设计 以及: package com.weiyuan.goods.category.domain; import java.util.List; public class Categor ...

  8. android handle详解2 主线程给子线程发送消息

    按照android handler详解分析的原理我们可以知道,在主线程中创建handle对象的时候,主线程默认创建了一个loop对象使用threalocal函数将loop对象和主线程绑定. 我们能不能 ...

  9. mysqldump: Got error: 1044: Access denied for user 'root'@'%' to database 'hhh' when using LOCK TABLES

    错误原因:mysqldump 命令执行时,需要四种权限,分别是:select,show view,trigger,lock table.但是因为没有lock table的权限,导致上述错误发生. 修改 ...

  10. Python3-json & pickle 序列化

    JSON(JavaScript Object Notation, JS对象标记)是一中轻量级的数据交换格式,大部分语言都支持 Python3中的json提供了对json格式数据的序列化支持 json. ...