如何使用Python来解析电子表格数据

97 阅读4分钟

Using Python to Parse Spreadsheet Data

大型组织和企业经常将数据存储在电子表格中,并需要一个接口将这些数据输入到他们的网络应用中。一般的想法是上传文件,读取其内容,并将其存储在网络应用程序使用的文件或数据库中。组织也可能需要从网络应用程序中导出数据。例如,他们可能需要导出一个班级中所有学生的成绩。同样,电子表格是首选媒介。

在这篇文章中,我们将讨论处理这些文件的不同方法,并使用Python解析它们以获得所需的信息。

快速电子表格入门

在解析电子表格之前,你必须了解它们是如何结构化的。一个电子表格文件是一个工作表的集合,每个工作表是放置在一个网格中的数据单元的集合,类似于一个表格。在一个工作表中,一个数据单元由两个值来识别:它的行号和列号。

A spreadsheet

例如,在上面的截图中,电子表格只包含一个工作表,"Sheet1"。单元格 "2A "对应的是第二行和第一列。2A单元格的值是1。

尽管带有图形用户界面的程序为列名指定了字母,但当我们解析数据时,我们将从0开始计算行号和列号。这意味着2A单元格将对应于(1,0),4B对应于(1,3),3C对应于(2,2),以此类推。

设置Python环境

我们将使用Python 3来读和写电子表格。为了读写XLSX文件,你需要安装Pandas模块。你可以通过Python安装程序之一来完成:pipeasy_install 。Pandas使用 openpyxl模块来读取新的电子表格(.xlsx)文件,和 xlrd模块来读取传统的电子表格 (.xls 文件)。当你安装Pandas时,这些openpyxlxlrd 都是作为依赖项安装的。

pip3 install pandas

要读和写CSV文件,你需要Python预装的csv 模块。你也可以通过 Pandas 读取 CSV 文件。

读取电子表格

如果你有一个文件,并且你想解析其中的数据,你需要按以下顺序执行。

  1. 导入pandas 模块
  2. 打开电子表格文件(或工作簿)。
  3. 选择一个工作表
  4. 提取特定数据单元的值

打开一个电子表格文件

让我们首先在 Python 中打开一个文件。为了跟上进度,你可以使用下面这个由Learning Container提供的电子表格样本

import pandas as pd
workbook = pd.read_excel('sample-xlsx-file-for-testing.xlsx')
workbook.head()

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; }

.dataframe thead th { text-align: right; }

段落国家产品折扣率销售单位制造价格销售价格销售总额折扣销售额营运成本利润日期月号月份名称
0政府加拿大航线1618.532032370.00.032370.016185.016185.02014-01-0111月2014
1政府德国航线1321.032026420.00.026420.013210.013210.02014-01-0111月2014
2中型市场法国驾车路线2178.031532670.00.032670.021780.010890.02014-06-0166月2014
3中型市场德国航线888.031513320.00.013320.08880.04440.02014-06-0166月2014
4中型市场墨西哥航线2470.031537050.00.037050.024700.012350.02014-06-0166月2014

Pandas将电子表格作为表格来读取,并将其存储为Pandas数据框

如果你的文件有非ASCII字符,你应该用unicode格式打开它,如下图。

import sys
workbook = pd.read_excel('sample-xlsx-file-for-testing.xlsx', encoding=sys.getfilesystemencoding())

如果你的电子表格非常大,你可以添加一个参数use_cols ,它只向数据框架加载某些列。例如,下面这个参数将只读取前五列。

workbook = pd.read_excel('~/Desktop/import-export-data.xlsx', usecols = 'A:E')
workbook.head()

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; }

.dataframe thead th { text-align: right; }

段落国家产品折扣率销售单位
0政府加拿大航线1618.5
1政府德国航线1321.0
2中型市场法国喀麦隆2178.0
3中型市场德国驾车出行888.0
4中型市场墨西哥驾车出行2470.0

此外,你可以使用nrowsskiprows 参数,分别只读取一定数量的行,或在开始时忽略一定数量的行。

继续阅读:在SitePoint使用Python解析电子表格数据