轻松处理表格数据集的 Python 库tablib实现数据导出为json/csv/excel等常见格式

@高效码农  January 2, 2024

简介:

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)

这会检测传入的数据类型,并使用适当的格式化程序进行导入。因此您可以从各种不同的文件类型导入。

没有标题的源

当格式为csvtsvdbfxlsxlsx,并且数据源没有标题时,导入应如下进行

将 open('data.csv', 'r') 作为 fh:

import_data = Dataset().load(fh, headers=False)

导出数据

DatasetTablib 的杀手级功能是将对象导出为多种格式的能力。

逗号分隔值

>>> 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]



评论已关闭