数据化运营

使用Python从Excel获取运营数据

Author
宋天龙
发布于 2017-07-09
2837 次阅读
0 次赞
0 次分享
使用Python从Excel获取运营数据
AI 智能核心导读

Python处理Excel文件常依赖xlrd、openpyxl及Pandas等第三方库。以xlrd模块为例,通过调用相关API可高效实现工作簿读取、行列切片及单元格数据提取,但需注意中文Unicode编码与日期数值化转换现象。在企业实际场景中,Excel受限于承载量,不适用于海量数据计算,更适合作为基础数据处理或汇总结果展示的载体。

Python 处理 Excel 文件指南:以 xlrd 模块为例

Excel 格式与 Python 处理库概览

现有的 Excel 分为两种格式:xls(Excel 97-2003)和 xlsx(Excel 2007 及以上)。

Python 处理 Excel 文件主要依赖以下第三方模块库:

  • xlrdxlwtpyexcel-xlsxlutilspyExcelerator
  • win32comopenpyxl 模块
  • 此外,Pandas 中也带有可以读取 Excel 文件的模块(read_excel)。

使用 xlrd 模块读取 Excel 数据

基于扩展知识的目的,我们使用 xlrd 模块读取 Excel 数据。

1. 安装与准备

首先安装该库,在系统终端命令行输入以下命令:

bash
1pip install xlrd

然后我们以“附件-chapter2”文件夹中的 demo.xlsx 数据文件为例,介绍该库的具体应用。数据概览如图所示:

excel_data
excel_data

2. 代码实战

python
1import xlrd # 导入库 2 3# 打开文件 4xlsx = xlrd.open_workbook('demo.xlsx') 5 6# 查看所有 sheet 列表 7print('All sheets: %s' % xlsx.sheet_names()) 8print('===================================') # 内容分割线 9 10# 查看 sheet1 的数据概况 11sheet1 = xlsx.sheets()[0] # 获得第一张 sheet,索引从 0 开始 12sheet1_name = sheet1.name # 获得名称 13sheet1_cols = sheet1.ncols # 获得列数 14sheet1_nrows = sheet1.nrows # 获得行数 15print('Sheet1 Name: %s\nSheet1 cols: %s\nSheet1 rows: %s' % (sheet1_name, sheet1_cols, sheet1_nrows)) 16print('===================================') # 内容分割线 17 18# 查看 sheet1 的特定切片数据 19sheet1_nrows4 = sheet1.row_values(4) # 获得第 4 行数据 20sheet1_cols2 = sheet1.col_values(2) # 获得第 2 列数据 21cell23 = sheet1.row(2)[3].value # 查看第 3 行第 4 列数据 22print('Row 4: %s\nCol 2: %s\nCell 1: %s\n' % (sheet1_nrows4, sheet1_cols2, cell23)) 23print('===================================') # 内容分割线 24 25# 查看 sheet1 的数据明细 26for i in range(sheet1_nrows): # 逐行打印 sheet1 数据 27 print(sheet1.row_values(i))

上述代码中,我们先读取一个 Excel 文件,再查看所有 sheet(工作簿)并输出 sheet1 相关属性信息;然后查看 sheet1 中特定数据行、列和元素的信息;最后我们用循环的方式,依次读取每个数据行并打印输出。

3. 执行结果与原理解析

以下是代码执行后打印输出的结果:

code
1All sheets: [u'Sheet1'] 2=================================== 3Sheet1 Name: Sheet1 4Sheet1 cols: 4 5Sheet1 rows: 10 6=================================== 7Row 4: [u'431381197408191515', u'\u6709\u6548', 42725.0, u'\u6df1\u5733\u5e02'] 8Col 2: [u'Create_Time', 42725.0, 42725.0, 42725.0, 42725.0, 42725.0, 42725.0, 42725.0, 42725.0, 42725.0] 9Cell 1: 深圳市 10=================================== 11[u'ID_number', u'Status', u'Create_Time', u'Business_City'] 12[u'431381198109106573', u'\u6709\u6548', 42725.0, u'\u6df1\u5733\u5e02'] 13[u'431381198809122734', u'\u6709\u6548', 42725.0, u'\u6df1\u5733\u5e02'] 14[u'431381197903117478', u'\u6709\u6548', 42725.0, u'\u6df1\u5733\u5e02'] 15[u'431381197408191515', u'\u6709\u6548', 42725.0, u'\u6df1\u5733\u5e02'] 16[u'431381197606166011', u'\u6709\u6548', 42725.0, u'\u6df1\u5733\u5e02'] 17[u'43138119850623339X', u'\u6709\u6548', 42725.0, u'\u6df1\u5733\u5e02'] 18[u'431381198908223477', u'\u6709\u6548', 42725.0, u'\u6df1\u5733\u5e02'] 19[u'431381198901176911', u'\u6709\u6548', 42725.0, u'\u6df1\u5733\u5e02'] 20[u'43138119870827275X', u'\u6709\u6548', 42725.0, u'\u6df1\u5733\u5e02']

💡 提示与异常说明

在上述打印输出的内容中,我们发现第二列、第三列、第四列与原始数据似乎不同:

  • 第二列和第四列“异常”:原因是将中文编码统一转换为了 Unicode 编码,便于在不同程序间调用。
  • 第三列“异常”:是由于将日期格式转换为了数值格式而已。

进阶思考与企业应用总结

上述操作只是将数据从 Excel 中读取出来,基于读取的数据转换为数组便可以进行矩阵计算。由于矩阵计算大多是基于数值型数据实现的,因此上述数据将无法适用于大多数科学计算场景,这点需要注意。

📌 总结

在企业实际场景中,由于 Excel 本身的限制和适用性,其无法存储和计算过大(例如千万级的数据记录)的数据量,并且 Excel 本身也不是为了海量数据的应用而产生的。

因此,Excel 可以作为日常基本数据处理补充数据来源或者汇总级别的数据进行读取;同时也可以作为数据结果展示的载体,在这种应用下,对于大量数值表格的应用效果非常好。

分享
最后修订: 2017-07-09