轻松处理表格数据集的 Python 库tablib实现数据导出为json/csv/excel等常见格式
简介:
tablib允许您导入、导出和操作表格数据集。高级功能包括隔离、动态列、标签和过滤以及无缝格式导入和导出。
安装
当然,推荐的安装 Tablib 的方法是使用pip:
$ pip install tablib
您还可以选择安装更多依赖项以获得更多可用的导入/导出格式:
$ pip install "tablib\[xlsx\]"
或所有可能的格式:
$ pip install "tablib\[all\]"
这相当于:
$ pip install "tablib\[html, pandas, ods, xls, xlsx, yaml\]"
使用
让我们从一些简单的用例和示例开始。
创建数据集¶
ADataset
顾名思义就是一组数据。
创建您自己的对象实例tablib.Dataset
很简单。
data = tablib.Dataset()
您现在可以开始用Dataset
数据填充该对象。
示例上下文
从现在开始,如果您看到data
,则假设它是一个新 Dataset
对象。
添加行¶
假设您想要收集一个简单的姓名列表。
# collection of names
names = ['Kenneth Reitz', 'Bessie Monke']
for name in names:
\# split name appropriately
fname, lname \= name.split()
\# add names to Dataset
data.append(\[fname, lname\])
您可以随时使用以下命令获得数据集的漂亮 Python 视图Dataset.dict
:
>>> data.dict
[('Kenneth', 'Reitz'), ('Bessie', 'Monke')]
添加标头¶
是时候Dataset
通过给我们的专栏一些标题来增强我们的内容了。为此,请设置Dataset.headers
.
data.headers = ['First Name', 'Last Name']
现在我们的数据看起来有点不同。
>>> data.dict
[{'Last Name': 'Reitz', 'First Name': 'Kenneth'},
{'Last Name': 'Monke', 'First Name': 'Bessie'}]
添加列¶
现在我们已经有了一个基础Dataset
,让我们向其中添加一列年龄。
data.append_col([22, 20], header='Age')
现在让我们查看数据。
>>> data.dict
[{'Last Name': 'Reitz', 'First Name': 'Kenneth', 'Age': 22},
{'Last Name': 'Monke', 'First Name': 'Bessie', 'Age': 20}]
就是这么简单。
导入数据¶
tablib.Dataset
通过导入预先存在的文件来创建对象很简单。
with open('data.csv', 'r') as fh:
imported\_data \= Dataset().load(fh)
这会检测传入的数据类型,并使用适当的格式化程序进行导入。因此您可以从各种不同的文件类型导入。
没有标题的源
当格式为csv
、tsv
、dbf
、xls
或xlsx
,并且数据源没有标题时,导入应如下进行
将 open('data.csv', 'r') 作为 fh:
import_data = Dataset().load(fh, headers=False)
导出数据¶
Dataset
Tablib 的杀手级功能是将对象导出为多种格式的能力。
逗号分隔值
>>> data.export('csv')
Last Name,First Name,Age
Reitz,Kenneth,22
Monke,Bessie,20
JavaScript 对象表示法
>>> data.export('json')
[{"Last Name": "Reitz", "First Name": "Kenneth", "Age": 22}, {"Last Name": "Monke", "First Name": "Bessie", "Age": 20}]
YAML 不是标记语言
>>> data.export('yaml')
- {Age: 22, First Name: Kenneth, Last Name: Reitz}
- {Age: 20, First Name: Bessie, Last Name: Monke}
微软Excel
>>> data.export('xls')
熊猫数据框
>>> data.export('df')
First Name Last Name Age
0 Kenneth Reitz 22
1 Bessie Monke 21
选择行和列¶
您可以对数据进行切片和切块,就像标准的 Python 列表一样。
>>> data[0]
('Kenneth', 'Reitz', 22)
如果我们有一组由数千行组成的数据,那么获取列中的值列表可能会很有用。为此,我们Dataset
像访问标准 Python 字典一样访问它。
>>> data['First Name']
['Kenneth', 'Bessie']
您还可以使用其索引来访问该列。
>>> data.headers
['Last Name', 'First Name', 'Age']
>>> data.get_col(1)
['Kenneth', 'Bessie']
让我们找出平均年龄。
>>> ages = data['Age']
>>> float(sum(ages)) / len(ages)
21.0
删除行和列¶
这比你想象的要容易。删除一列:
>>> del data['Col Name']
删除一定范围的行:
>>> del data[0:12]