1 Tablib简介
数据处理是一个常见且重要的任务。无论是数据科学、机器学习,还是日常数据分析,都需要处理和管理大量的数据。然而,标准库中的工具有时显得不够直观和简便。这时,我们可以借助第三方库来简化数据处理流程。Tablib 就是这样一个强大的数据处理库,它提供了一套简单易用的 API 来处理各种数据格式。
Tablib 主要用于处理表格数据,并且支持多种数据格式的导入和导出,包括 CSV、Excel、JSON、YAML 等。Tablib 的核心是 Dataset 对象,它类似于一个电子表格,包含行和列的结构化数据。
2 安装Tablib
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tablib
如下图:
3 代码示例
3.1 创建Dataset
首先,我们来看如何创建一个 Dataset 对象,并向其中添加数据。
import tablib
# 创建一个Dataset对象
data = tablib.Dataset()
# 添加表头
data.headers = ['name', 'age', 'city']
# 添加数据行
data.append(['Alice', 30, 'New York'])
data.append(['Bob', 25, 'Los Angeles'])
data.append(['Charlie', 35, 'Chicago'])
print(data.export('csv'))
在这个例子中,我们首先创建了一个 Dataset 对象,并设置了表头。然后通过 append 方法添加了几行数据。最后,我们将数据导出为 CSV 格式并打印出来,如下图:
查看源码,Dataset对象支持的格式如下:
3.2 数据导出
Tablib 支持将数据导出为多种格式。以下是一些常用格式的导出示例:
import tablib
# 创建一个Dataset对象
data = tablib.Dataset()
# 添加表头
data.headers = ['name', 'age', 'city']
# 添加数据行
data.append(['Alice', 30, 'New York'])
data.append(['Bob', 25, 'Los Angeles'])
data.append(['Charlie', 35, 'Chicago'])
# 导出为 CSV
csv_data = data.export('csv')
print(csv_data)
# 导出为 JSON
json_data = data.export('json')
print(json_data)
# 导出为 Excel
with open('data.xls', 'wb') as f:
f.write(data.export('xls'))
可以看到如下:
内容如下:
注意:
导出xls格式的包可能需要单独安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tablib[xls]
缺少文件时会有提示,源代码如下:
3.3 数据导入
同样,Tablib 也支持从多种格式导入数据。以下是从 CSV 导入数据的示例:
import tablib
# 从 CSV 导入数据
csv_data = """name,age,city
Alice,30,New York
Bob,25,Los Angeles
Charlie,35,Chicago"""
data = tablib.Dataset()
data.csv = csv_data
print(data.dict)
在这个例子中,我们首先定义了一段 CSV 格式的字符串,然后使用 Dataset 对象的 csv 属性将其导入。
3.4 合并多个数据集
假设我们有两个 CSV 文件,分别包含不同的用户数据。我们可以使用 Tablib 来合并这些数据。
import tablib
# 第一个数据集
data1 = tablib.Dataset()
data1.headers = ['name', 'age', 'city']
data1.append(['Alice', 30, 'New York'])
data1.append(['Bob', 25, 'Los Angeles'])
# 第二个数据集
data2 = tablib.Dataset()
data2.headers = ['name', 'age', 'city']
data2.append(['Charlie', 35, 'Chicago'])
data2.append(['David', 28, 'Houston'])
# 合并数据集
data1.rpush(*data2.dict)
print(data1.export('csv'))
在这个示例中,我们创建了两个 Dataset 对象,然后使用 rpush 方法将第二个数据集的数据添加到第一个数据集中。
3.5 过滤数据
Tablib提供了filter方法,以根据数据集的标签(tags)来过滤数据。
import tablib
fruits = tablib.Dataset()
fruits.headers = ['name', 'color']
# 添加tags为fruit与sour的行
fruits.append(['tomato', 'red'], tags=['fruit', 'sour'])
fruits.append(['strawberry', 'red'], tags=['fruit', 'sweet'])
fruits.append(['corn', 'yellow'], tags=['vegetable', 'sweet'])
fruits_filter = fruits.filter(['vegetable'])
print(fruits_filter.export('csv'))
结果如下:
3.6 数据统计
import tablib
# 创建数据集
data = tablib.Dataset()
data.headers = ['name', 'age', 'city']
data.append(['Alice', 30, 'New York'])
data.append(['Bob', 25, 'Los Angeles'])
data.append(['Charlie', 35, 'Chicago'])
# 计算平均年龄
ages = [int(row['age']) for row in data.dict]
average_age = sum(ages) / len(ages)
print(f'平均年龄: {average_age}')
在这个示例中,我们首先提取出所有用户的年龄,然后计算平均值: