python库(13):Tablib库简化数据处理

news2024/11/15 21:47:42

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}')

在这个示例中,我们首先提取出所有用户的年龄,然后计算平均值:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1922830.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一.3.(1)结型MOSFET场效应管的结构和工作原理;

N沟道结型MOSFET的结构 看完上图,会发现其实本质上二极管,三极管,MOS管都是PN结,如果第一章一.1.(1)半导体基础知识_木头的最外层电子是多少个-CSDN博客 理解消化以后,发现底层原理都一样。 例如…

Linux进程编程(使用fork函数创建进程以及fork函数的实际引用场景)

目录 一、进程以及相关概念和指令 1.什么是进程、什么是程序、有什么区别? 2.如何查看系统中有哪些进程? 3.什么是进程标识符? 4.什么叫父进程,什么叫子进程? 二、进程的创建 三、fork函数的实际应用场景 总结…

[每周一更]-(第105期):SSL证书过期后引发的DNS缓存问题

问题回顾: ​ 上班路上收到ZeroSSL邮件通知我们清点项目的SSL证书到期了,到公司还是登录网址查看信息,一看果然是7.10也就是今天到期,开始看下acme.sh的定制任务为何没生效,一看crontab脚本,日志任务丢垃圾…

Java高频面试基础知识点整理13

干货分享,感谢您的阅读!背景​​​​​​高频面试题基本总结回顾(含笔试高频算法整理) 最全文章见:Java高频面试基础知识点整理 (一)Java基础高频知识考点 针对人员: 1.全部人员都…

CSS实现table表格:隔行换色的效果

表格是网页中十分重要的组成元素。表格用来存储数据&#xff0c;包含标题、表头、行和单元格。在HTML语言中&#xff0c;表格标记使用符号<table>表示。定义表格光使用<table>是不够的&#xff0c;还需要定义表格中的行、列、标题等内容。推荐博文&#xff1a;《HT…

LeetCode热题100刷题13:64. 最小路径和、62. 不同路径、5. 最长回文子串、1143. 最长公共子序列

64. 最小路径和 class Solution { public:int minPathSum(vector<vector<int>>& grid) {int m grid.size();int n grid[0].size();vector<vector<int>> dp(m,vector<int>(n,INT_MAX));dp[0][0]grid[0][0];if(m1 && n1)return grid…

使用 Apache Pulsar 构建弹性可扩展的事件驱动应用

本视频来自 2024 Apache Pulsar 欧洲峰会&#xff0c;由 David Kjerrumgaard, 《Pulsar in Action》书作者给大家带来的《使用 Apache Pulsar 构建弹性可扩展的事件驱动应用》分享。 嘉宾&#xff5c;David Kjerrumgaard&#xff0c;Apache Pulsar Committer&#xff0c;《Pul…

登录/注册

目录 1.HTML 2.CSS 3.JS 4.资源 5.运行结果 6.下载链接 7.注意事项 1.HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…

我的世界1.21多种服务端开服教程,原版/Forge/Fabric/Paper/Mohist...,Minecraft开服教程

Minecraft&#xff08;MC&#xff09;1.21版多种服务端开服教程&#xff0c;我的世界1.21服务器搭建教程&#xff0c;MC原版/Forge/Fabric/Paper/Mohist服务端搭建教程&#xff0c;我的世界MOD/插件服开服教程。 本教程使用 Linux系统MCSManager 面板来搭建Minecraft服务器。 …

编译打包自己的云手机(redroid)镜像

前言 香橙派上跑云手机可以看之前的文章&#xff1a; 香橙派5plus上跑云手机方案一 redroid(带硬件加速)香橙派5plus上跑云手机方案二 waydroid 还有一个cuttlefish方案没说&#xff0c;后面再研究&#xff0c;cuttlefish的优势在于可以自定义内核且selinux是开启的&#xf…

昇思25天学习打卡营第25天 | ResNet50迁移学习

ResNet50迁移学习 https://gitee.com/mindspore/docs/blob/r2.2/tutorials/application/source_zh_cn/cv/transfer_learning.ipynb 在实际应用场景中&#xff0c;由于训练数据集不足&#xff0c;所以很少有人会从头开始训练整个网络。普遍的做法是&#xff0c;在一个非常大的…

踩坑日记 | 记一次流程图问题排查

踩坑日记&#xff1a;记一次流程图问题排查 标签&#xff1a; activiti | 流程 引言 今天排查了一个流程图问题&#xff0c;耗时2个小时终于解决&#xff0c;记录下来 现象 流程审批驳回报错&#xff1a;Unknown property used in expression: ${xxxx} 使用的是 activiti …

golang json反序列化科学计数法的坑

问题背景 func CheckSign(c *gin.Context, signKey string, singExpire int) (string, error) {r : c.Requestvar formParams map[string]interface{}if c.Request.Body ! nil {bodyBytes, _ : io.ReadAll(c.Request.Body)defer c.Request.Body.Close()if len(bodyBytes) >…

从概念到完成:Midjourney——设计思维与AI技术的完美结合

文章目录 本文来自 Python学研大本营 作者 学研君 去年 AI 爆火的时候&#xff0c;学研君也赶时髦用上了 Midjourney。平时用它生成图片&#xff0c;感觉生成的图片好看&#xff0c;比上网四处找图更省时省事&#xff0c;更合心意&#xff0c;还不用担心版权问题。 给大家看一下…

【Android面试八股文】组件化在项目中有什么意义?

一、没有组件化会出现什么问题? 早期的单一分层模式 问题一:无论分包怎么做,随着项目增大,项目失去层次感,后面接手的人扑街问题二:包名约束太弱,稍有不注意,就会不同业务包直接互相调用,代码高耦合问题三:多人开发在版本管理中,容易出现代码覆盖冲突等问题二、组件…

流程制造业与离散制造业有何差异?流程行业智能制造关注什么?

在当今快速发展的工业领域&#xff0c;智能制造已经成为推动制造业转型升级的关键力量。随着“工业4.0”概念的提出&#xff0c;智能制造的理念和技术被广泛应用于各个制造行业&#xff0c;包括离散制造业和流程制造业。尽管智能制造的起源和发展在很大程度上受到了离散制造业的…

信创终端操作系统上ps命令详解 _ 统信 _ 麒麟 _ 中科方德

原文链接&#xff1a;信创终端操作系统上ps命令详解 | 统信 | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于信创终端上ps命令详解的文章。ps命令是Linux和类Unix操作系统中的一个常用命令&#xff0c;用于显示当前系统中的进程状态。本文将详…

【手写数据库内核组件】0301 动态内存池,频繁malloc/free让系统不堪重负,动态内存池让应用自由使用动态内存

动态内存管理 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 动态内存管…

AI算法07-人工神经网络Artificial Neural Network | ANN

什么是神经网络 简介 人工神经网络&#xff08;ANN&#xff09;或连接系统是由构成动物大脑的生物神经网络模糊地启发的计算系统。神经网络本身不是算法&#xff0c;而是许多不同机器学习算法的框架&#xff0c;它们协同工作并处理复杂的数据输入。此类系统通过考虑示例“学习…

基于颜色模型和边缘检测的火焰识别FPGA实现,包含testbench和matlab验证程序

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 将FPGA仿真结果导入到matlab显示结果&#xff1a; 测试样本1 测试样本2 测试样本3 2.算法运行软件版本 vivado2019.2 …