由于后面的项目需要直接处理excel表格(xls,xlsx等),因此,对excel处理的相关工具进行学习。
对于csv文件,由于其本质为文本格式,可以直接进行方便的读写操作
通过python对excel表格文件进行处理有多种方式:pandas,openpyxl,xlrd,xlutils和pyexcel之类的软件包都提供了与excel文件交互的接口。
1.pandas与excel
pandas读取excel
1 | import pandas as pd |
pd.ExcelFile vs pd.read_excel
pd.ExcelFile是一个类,而read_excel是一个方法
在最新版本的pandas中,read_excel确保它具有一个ExcelFile对象(如果没有则创建一个对象),然后_parse_excel直接调用该方法:
1
2
3 if not isinstance(io, ExcelFile):
io = ExcelFile(io, engine=engine)
return io._parse_excel(...)通过更新的(统一的)参数处理,ExcelFile.parse实际上仅是一条语句:
return self._parse_excel(...)
pandas写入excel
1 | # Install `XlsxWriter` |
2.openpyxl与excel
openpyxl支持.xlsx,xlsm,xltx,和xltm等格式
读取
1 | # Import `load_workbook` module from `openpyxl` |
查看activate sheet
1 | # Get a sheet by name |
获取
获取某个单元格的信息
1 | # Retrieve the value of a certain cell |
获取某个位置的单元格
1 | print(sheet.cell(row=1, column=2).value) |
openpyxl有一个utility
有两个方法get_column_letter
和column_index_from_string
。顾名思义,前者返回给定字母的数字/整数,后者返回提供字母的数字作为字符串。
1 | # Import relevant modules from `openpyxl.utils` |
切片
1 | for cellObj in sheet['A1':'C3']: |
sheet属性
1 | # Retrieve the maximum amount of rows |
与pandas结合使用
可以使用Pandas包中的函数将工作表的值放入DataFrame中,然后使用DataFrame函数来分析和处理数据:
1 | # Import `pandas` |
如果要指定标头和索引,则可以传递标头参数,其中标头和索引的列表为True,但是,由于转换为数据框的工作表已经包含标头,因此不需要添加标头:
1 | from itertools import islice |
写回excel文件
1 | # Import `dataframe_to_rows` |
3.xlrd与excel
读取xls和xlxs格式的文件
1 | # Import `xlrd` |
获取
1 | # Load a specific sheet by name |
4.xlwt与excel
xlwt创建电子表格。
1 | # Import `xlwt` |
1 | # Initialize a workbook |
1 | import xlwt |
5.pyexcel与excel
pyexcel提供用于读取,操作和在写入数据的单个API接口(.csv,.ods,.xls,.xlsx,和.xlsm文件)。使用pyexcel,可以用最少的代码将excel文件中的数据转换为数组或dict格式。
数组格式
1 | # Import `pyexcel` |
字典格式
1 | # Import `OrderedDict` module |
还可以获得二维数组的字典。简而言之,您可以借助该get_book_dict()功能将所有工作簿表提取到一个字典中。
1 | # Get your data in a dictionary of 2D arrays |
写入excel文件
1 | # Get the data |
6. csv库
1 | # import `csv` |
7. xlsxwriter库
xlsxwriter库可以在excel文件中使用excel自带的绘图进行绘制
简单使用:
1 | import xlsxwriter |
- 在XlsxWriter中,行和列都是零索引。工作表中的第一个单元格A1是(0, 0)。
设置行高
1 | sheet_handle.set_default_row(30) |
设置单元格格式
1 | title_format = workbook_handle.add_format({"font_name": "Arial", "bold": True, "font_size": 20}) |
添加图表
https://xlsxwriter.readthedocs.io/chart.html
1 | chart = workbook.add_chart({'type': 'column'}) |
type可用类型:bar、column、doughnut、line、pie、radar、scatter、stock
添加序列
1 | chart.add_series({ |
序列可设置的参数:
values:这是系列中最重要的属性,并且是每个图表对象的唯一必需选项。此选项将图表与其显示的工作表数据链接起来。可以使用上面第一个示例中所示的公式或使用第二个示例中所示的值列表来设置数据范围。
categories:这将设置图表类别标签。类别与X轴大致相同。在大多数图表类型中,该categories 属性是可选的,图表仅假设的序列为 1..n。
name:设置系列的名称。名称显示在编辑栏中。对于非饼图/甜甜圈图,它也会显示在图例中。name属性是可选的,如果未提供,则默认为 。名称也可以是公式,例如或带有工作表名称,行和列的列表,例如。Series 1..n=Sheet1!$A$1[‘Sheet1’, 0, 0]
line:设置系列线型的属性,例如颜色和宽度。请参阅图表格式:线。
border:设置系列的边框属性,例如颜色和样式。请参阅图表格式:边框。
fill:设置系列的实心填充属性,例如颜色。请参阅 图表格式:实心填充。
- pattern:设置系列的图案填充属性。请参阅 图表格式:模式填充。
gradient:设置系列的渐变填充属性。请参阅 图表格式:“渐变填充”。
marker:设置系列标记的属性,例如样式和颜色。请参阅图表系列选项:标记。
trendline:设置系列趋势线的属性,例如线性,多项式和移动平均线类型。请参阅 图表系列选项:趋势线。
smooth:设置线系列的平滑属性。
y_error_bars:设置图表系列的垂直误差范围。请参阅 图表系列选项:误差线。
x_error_bars:设置图表系列的水平误差范围。请参阅 图表系列选项:误差线。
data_labels:设置系列的数据标签。请参阅 图表系列选项:数据标签。
points:设置系列中各个点的属性。请参阅 图表系列选项:点。
invert_if_negative:将填充颜色反转为负值。通常仅适用于柱状图和条形图。
overlap:在条形图/柱形图中设置系列之间的重叠。范围是+/-100。默认值为0:
gap:在条形图/柱形图中设置系列之间的间隔。范围是0到500。默认值是150:
设置轴属性
chart.set_x_axis()
辅助x轴chart.set_x2_axis()
合并图表
chart.combine()
设置大小
chart.set_size()
可设置的属性:width、height、x_scale、y_scale、x_offset、y_offset
offset
也可通过worksheet.insert_chart('E2', chart, {'x_offset': 25, 'y_offset': 10})
设定
设置标题
chart.set_title({'name': 'Year End Results'})
设置图例
chart.set_legend({'none': True})
notation的转换
1 | from xlsxwriter.utility import xl_rowcol_to_cell |