数据可视化基础专题(二):Pandas基础(一)IO(一) excel导入与导出
1.Excel
1.1 Excel导入
read_excel()
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()
。
在进行导入操作的时候,要注意文件路径,这里的文件路径可以使用相对路径也可以使用绝对路径,但是不管哪种路径最基本的是要写对。
import pandas as pd df = pd.read_excel("result_data.xlsx")# 相对路径 print(df) # 输出内容 plantform read_num fans_num rank_num like_num create_date 0 cnblog 215 0 118 0 2019-11-23 23:00:10 1 juejin 177 0 -2 1 2019-11-23 23:00:03 2 csdn 1652 69 0 24 2019-11-23 23:00:02 3 cnblog 650 3 191 0 2019-11-22 23:00:15 4 juejin 272 3 -23 1 2019-11-22 23:00:02 .. ... ... ... ... ... ... 403 juejin 212 0 -1 2 2020-02-20 23:00:02 404 csdn 1602 1 0 1 2020-02-20 23:00:01 405 cnblog 19 0 41 0 2020-02-21 23:00:05 406 juejin 125 1 -4 0 2020-02-21 23:00:02 407 csdn 1475 8 0 3 2020-02-21 23:00:02 [408 rows x 6 columns]
Windows 的操作系统,文件路径默认是使用 \
,如 D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx
,我们在直接使用 Windows 的文件路径的时候需要在前面增加一个 r (转义符)避免路径中的 \
被转义,如下:
import pandas as pd df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx") #df = pd.read_excel("D:\\Development\\Projects\\python-learning\\python-data-analysis\\pandas-demo\\result_data.xlsx") 也可以这样 print(df) # 输出内容 plantform read_num fans_num rank_num like_num create_date 0 cnblog 215 0 118 0 2019-11-23 23:00:10 1 juejin 177 0 -2 1 2019-11-23 23:00:03 2 csdn 1652 69 0 24 2019-11-23 23:00:02 3 cnblog 650 3 191 0 2019-11-22 23:00:15 4 juejin 272 3 -23 1 2019-11-22 23:00:02 .. ... ... ... ... ... ... 403 juejin 212 0 -1 2 2020-02-20 23:00:02 404 csdn 1602 1 0 1 2020-02-20 23:00:01 405 cnblog 19 0 41 0 2020-02-21 23:00:05 406 juejin 125 1 -4 0 2020-02-21 23:00:02 407 csdn 1475 8 0 3 2020-02-21 23:00:02 [408 rows x 6 columns]
指定导入 Sheet
我们在使用 Excel 导入的时候,除了可以指定文件路径,还可以选择导入的 Sheet
在设置 Sheet 的时候,我们使用参数 sheet_name
来完成,示例如下:
import pandas as pd df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name='result_data') print(df) # 输出结果 plantform read_num fans_num rank_num like_num create_date 0 cnblog 215 0 118 0 2019-11-23 23:00:10 1 juejin 177 0 -2 1 2019-11-23 23:00:03 2 csdn 1652 69 0 24 2019-11-23 23:00:02 3 cnblog 650 3 191 0 2019-11-22 23:00:15 4 juejin 272 3 -23 1 2019-11-22 23:00:02 .. ... ... ... ... ... ... 403 juejin 212 0 -1 2 2020-02-20 23:00:02 404 csdn 1602 1 0 1 2020-02-20 23:00:01 405 cnblog 19 0 41 0 2020-02-21 23:00:05 406 juejin 125 1 -4 0 2020-02-21 23:00:02 407 csdn 1475 8 0 3 2020-02-21 23:00:02 [408 rows x 6 columns]
如果我们要使用一个完全不存在的 Sheet 名称会发生什么事情呢?例如我们将上面的 sheet_name
修改为 aaa
,来看下:
import pandas as pd df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name='aaa') print(df) # 输出结果 Traceback (most recent call last): File "C:\Users\inwsy\AppData\Local\Programs\Python\Python37\lib\site-packages\xlrd\book.py", line 474, in sheet_by_name sheetx = self._sheet_names.index(sheet_name) ValueError: 'aaa' is not in list During handling of the above exception, another exception occurred:
可以看到这里抛出了 ValueError 的异常,并且提示 aaa
不在列表中。
在指定 Sheet 名称的时候除了可以使用 Sheet 的具体名称,还可以使用 Sheet 的顺序,需要注意这个顺序开头是从 0 开始的。
import pandas as pd df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0) print(df) # 输出结果 plantform read_num fans_num rank_num like_num create_date 0 cnblog 215 0 118 0 2019-11-23 23:00:10 1 juejin 177 0 -2 1 2019-11-23 23:00:03 2 csdn 1652 69 0 24 2019-11-23 23:00:02 3 cnblog 650 3 191 0 2019-11-22 23:00:15 4 juejin 272 3 -23 1 2019-11-22 23:00:02 .. ... ... ... ... ... ... 403 juejin 212 0 -1 2 2020-02-20 23:00:02 404 csdn 1602 1 0 1 2020-02-20 23:00:01 405 cnblog 19 0 41 0 2020-02-21 23:00:05 406 juejin 125 1 -4 0 2020-02-21 23:00:02 407 csdn 1475 8 0 3 2020-02-21 23:00:02 [408 rows x 6 columns]
指定导入行索引
我们在导入文件的时候,行索引默认是会使用从 0 开始的默认索引,如果对行索引有需求的话,可以使用 index_col
参数来设置行索引。
比如我们现在设置 create_date
这个参数作为行索引,注意参数起始从 0 开始:
import pandas as pd df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, index_col=5) print(df) # 输出结果 plantform read_num fans_num rank_num like_num create_date 2019-11-23 23:00:10 cnblog 215 0 118 0 2019-11-23 23:00:03 juejin 177 0 -2 1 2019-11-23 23:00:02 csdn 1652 69 0 24 2019-11-22 23:00:15 cnblog 650 3 191 0 2019-11-22 23:00:02 juejin 272 3 -23 1 ... ... ... ... ... ... 2020-02-20 23:00:02 juejin 212 0 -1 2 2020-02-20 23:00:01 csdn 1602 1 0 1 2020-02-21 23:00:05 cnblog 19 0 41 0 2020-02-21 23:00:02 juejin 125 1 -4 0 2020-02-21 23:00:02 csdn 1475 8 0 3 [408 rows x 5 columns]
指定导入列索引
同行索引一样,默认也是采用源数据的第一行作为列索引,同样,我们可以通过 header
进行列索引的设置, header
的默认参数为 0 ,也就是第一行,自定义可以使用其他行,将行号作为参数传入即可,我们演示一下使用第二行作为索引:
import pandas as pd df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, header=1) print(df) # 输出结果 cnblog 215 0 118 0.1 2019-11-23 23:00:10 0 juejin 177 0 -2 1 2019-11-23 23:00:03 1 csdn 1652 69 0 24 2019-11-23 23:00:02 2 cnblog 650 3 191 0 2019-11-22 23:00:15 3 juejin 272 3 -23 1 2019-11-22 23:00:02 4 csdn 2202 129 0 37 2019-11-22 23:00:01 .. ... ... ... ... ... ... 402 juejin 212 0 -1 2 2020-02-20 23:00:02 403 csdn 1602 1 0 1 2020-02-20 23:00:01 404 cnblog 19 0 41 0 2020-02-21 23:00:05 405 juejin 125 1 -4 0 2020-02-21 23:00:02 406 csdn 1475 8 0 3 2020-02-21 23:00:02 [407 rows x 6 columns]
指定导入行数
有时候,如果我们只需要了解一下这个文件中有些什么数据,那么我们就不需要导入所有的数据,可以使用 nrows
来指定导入的行数,这里我们选择导入 Excel 的前 100 行:
import pandas as pd df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, nrows=100) print(df) # 输出结果 plantform read_num fans_num rank_num like_num create_date 0 cnblog 215 0 118 0 2019-11-23 23:00:10 1 juejin 177 0 -2 1 2019-11-23 23:00:03 2 csdn 1652 69 0 24 2019-11-23 23:00:02 3 cnblog 650 3 191 0 2019-11-22 23:00:15 4 juejin 272 3 -23 1 2019-11-22 23:00:02 .. ... ... ... ... ... ... 95 csdn 1492 88 0 13 2019-10-23 23:51:37 96 cnblog 1338 2 219 0 2019-10-22 23:33:33 97 juejin 204 1 -6 6 2019-10-22 23:18:19 98 csdn 1064 61 7094 18 2019-10-22 23:18:08 99 cnblog -493 1 69 0 2019-10-21 22:38:32 [100 rows x 6 columns]
从结果的数据统计,可以看到我们成功的导入了前 100 行的数据,虽然行索引只有 99 ,是因为么我们 Excel 的头也占了一行。
指定导入列
有时候,我们的 Excel 中的列太多了,而我们处理的数据又不需要那么多列的时候,我们可以使用 usecols
来指定我们需要导入的列
import pandas as pd 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]) print(df) # 输出结果 plantform read_num fans_num 0 cnblog 215 0 1 juejin 177 0 2 csdn 1652 69 3 cnblog 650 3 4 juejin 272 3 .. ... ... ... 403 juejin 212 0 404 csdn 1602 1 405 cnblog 19 0 406 juejin 125 1 407 csdn 1475 8 [408 rows x 3 columns]
注意这里的 usecols
的参数是一个数组,表示我们将要导入的列。
1.2 Excel导出
在做数据导出前,我们需要现有一份 DataFrame 数据,这里的数据小编偷懒,就直接读取之前示例中的 Excel 了,当然这么做并没有什么意义,仅用来演示导出数据。
在 Pandas 中导出 Excel 的时候,需要使用到的方法是 to_excel()
方法,在导出 Excel 文件的时候,一定要写对文件路径,我们在前面的文章中有介绍过文件路径的书写方法,直接上示例:
import pandas as pd # 数据读取 df = pd.read_excel("table_join_exp.xlsx", sheet_name='Sheet1') # 数据导出 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,
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 :无穷值的处理
接下来看示例,这个示例小编会尽量写得复杂一点,把我们上面的属性尽可能的都用上,并且标注好注释:
df.to_excel(excel_writer=r'D:\Development\Projects\demo.xlsx', sheet_name='测试文档', # 创建 sheet 名称 index=False, # 设置索引不显示 columns=['编号', '姓名'], # 设置要导出的列 encoding='utf-8', # 设置编码格式 na_rep='0', # 缺失值处理 inf_rep='inf' # 无穷值处理 )
示例代码与文件 https://github.com/meteor1993/python-learning/tree/master/python-data-analysis/pandas-demo
本文来自博客园,作者:秋华,转载请注明原文链接:https://www.cnblogs.com/qiu-hua/p/12667398.html