iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python数据处理的26个Pandas实用技巧总结
  • 832
分享到

Python数据处理的26个Pandas实用技巧总结

2024-04-02 19:04:59 832人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录从剪贴板中创建DataFram将DataFrame划分为两个随机的子集多种类型过滤DataFrameDataFrame筛选数量最多类别处理缺失值一个字符串划分成多列Series扩

大家好,今天给大家分享一篇 pandas 实用技巧,共计26个,这些技巧在你做数据处理中必不可少,欢迎收藏,喜欢记得点赞、关注。

从剪贴板中创建DataFram

假设你将一些数据储存在excel或者Google Sheet中,你又想要尽快地将他们读取至DataFrame中。

你需要选择这些数据并复制至剪贴板。然后,你可以使用read_clipboard()函数将他们读取至DataFrame中:

图片

和read_csv()类似,read_clipboard()会自动检测每一列的正确的数据类型:

图片

让我们再复制另外一个数据至剪贴板:

图片

神奇的是,pandas已经将第一列作为索引了:

图片

需要注意的是,如果你想要你的工作在未来可复制,那么read_clipboard()并不值得推荐。

将DataFrame划分为两个随机的子集

假设你想要将一个DataFrame划分为两部分,随机地将75%的行给一个DataFrame,剩下的25%的行给另一个DataFrame。

举例来说,我们的movie ratings这个DataFrame有979行:

图片

我们可以使用sample()函数来随机选取75%的行,并将它们赋值给"movies_1"DataFrame:

图片

接着我们使用drop()函数来舍弃“moive_1”中出现过的行,将剩下的行赋值给"movies_2"DataFrame:

图片

你可以发现总的行数是正确的:

图片

你还可以检查每部电影的索引,或者"moives_1":

图片

或者"moives_2":

图片

需要注意的是,这个方法在索引值不唯一的情况下不起作用。

注: 该方法在机器学习或者深度学习中很有用,因为在模型训练前,我们往往需要将全部数据集按某个比例划分成训练集和测试集。该方法既简单又高效,值得学习和尝试。

多种类型过滤DataFrame

让我们先看一眼movies这个DataFrame:

In [60]:
movies.head()

Out[60]:

图片

其中有一列是genre(类型):

图片

比如我们想要对该DataFrame进行过滤,我们只想显示genre为Action或者Drama或者Western的电影,我们可以使用多个条件,以"or"符号分隔:

In [62]:
movies[(movies.genre == 'Action') |
       (movies.genre == 'Drama') |
       (movies.genre == 'Western')].head()

Out[62]:

图片

但是,你实际上可以使用isin()函数将代码写得更加清晰,将genres列表传递给该函数:

In [64]:
movies[~movies.genre.isin(['Action', 'Drama', 'Western'])].head()

Out[64]:

图片

如果你想要进行相反的过滤,也就是你将吧刚才的三种类型的电影排除掉,那么你可以在过滤条件前加上破浪号:

In [64]:
movies[~movies.genre.isin(['Action', 'Drama', 'Western'])].head()

Out[64]:

图片

这种方法能够起作用是因为在python中,波浪号表示“not”操作。

DataFrame筛选数量最多类别

假设你想要对movies这个DataFrame通过genre进行过滤,但是只需要前3个数量最多的genre。

我们对genre使用value_counts()函数,并将它保存成counts(type为Series):

图片

该Series的nlargest()函数能够轻松地计算出Series中前3个最大值:

图片

事实上我们在该Series中需要的是索引:

图片

最后,我们将该索引传递给isin()函数,该函数会把它当成genre列表:

In [68]:
movies[movies.genre.isin(counts.nlargest(3).index)].head()

Out[68]:

图片

这样,在DataFrame中只剩下Drame, Comdey, Action这三种类型的电影了。

处理缺失值

让我们来看一看UFO sightings这个DataFrame:

图片

你将会注意到有些值是缺失的

为了找出每一列中有多少值是缺失的,你可以使用isna()函数,然后再使用sum():

图片

isna()会产生一个由True和False组成的DataFrame,sum()会将所有的True值转换为1,False转换为0并把它们加起来。

类似地,你可以通过mean()和isna()函数找出每一列中缺失值的百分比。

图片

如果你想要舍弃那些包含了缺失值的列,你可以使用dropna()函数:

图片

或者你想要舍弃那么缺失值占比超过10%的列,你可以给dropna()设置一个阈值:

图片

len(ufo)返回总行数,我们将它乘以0.9,以告诉pandas保留那些至少90%的值不是缺失值的列。

一个字符串划分成多列

我们先创建另一个新的示例DataFrame:

图片

如果我们需要将“name”这一列划分为三个独立的列,用来表示first, middle, last name呢?我们将会使用str.split()函数,告诉它以空格进行分隔,并将结果扩展成一个DataFrame:

图片

这三列实际上可以通过一行代码保存至原来的DataFrame:

图片

如果我们想要划分一个字符串,但是仅保留其中一个结果列呢?比如说,让我们以", "来划分location这一列:

图片

如果我们只想保留第0列作为city name,我们仅需要选择那一列并保存至DataFrame:

图片

Series扩展成DataFrame

让我们创建一个新的示例DataFrame:

图片

这里有两列,第二列包含了Python中的由整数元素组成的列表。

如果我们想要将第二列扩展成DataFrame,我们可以对那一列使用apply()函数并传递给Series constructor:

图片

通过使用concat()函数,我们可以将原来的DataFrame和新的DataFrame组合起来:

图片

对多个函数进行聚合

让我们来看一眼从Chipotle restaurant chain得到的orders这个DataFrame:

In [82]:
orders.head(10)

Out[82]:

图片

每个订单(order)都有订单号(order_id),包含一行或者多行。为了找出每个订单的总价格,你可以将那个订单号的价格(item_price)加起来。比如,这里是订单号为1的总价格:

图片

如果你想要计算每个订单的总价格,你可以对order_id使用groupby(),再对每个group的item_price进行求和。

图片

但是,事实上你不可能在聚合时仅使用一个函数,比如sum()。**为了对多个函数进行聚合,你可以使用agg()函数,**传给它一个函数列表,比如sum()和count():

图片

这将告诉我们没定订单的总价格和数量。

聚合结果与DataFrame组合

让我们再看一眼orders这个DataFrame:

In [86]:
orders.head(10)

Out[86]:

图片

如果我们想要增加新的一列,用于展示每个订单的总价格呢?回忆一下,我们通过使用sum()函数得到了总价格:

图片

sum()是一个聚合函数,这表明它返回输入数据的精简版本(reduced version )。

换句话说,sum()函数的输出:

图片

比这个函数的输入要小:

图片

解决的办法是使用transform()函数****,它会执行相同的操作但是返回与输入数据相同的形状

图片

我们将这个结果存储至DataFrame中新的一列:

In [91]:
orders['total_price'] = total_price
orders.head(10)

Out[91]:

图片

你可以看到,每个订单的总价格在每一行中显示出来了。

这样我们就能方便地甲酸每个订单的价格占该订单的总价格的百分比:

In [92]:
orders['percent_of_total'] = orders.item_price / orders.total_price
orders.head(10)

In [92]:

图片

选取行和列的切片

让我们看一眼另一个数据集:

In [93]:
titanic.head()

Out[93]:

图片

这就是著名的Titanic数据集,它保存了Titanic上乘客的信息以及他们是否存活。

如果你想要对这个数据集做一个数值方面的总结,你可以使用describe()函数:

图片

但是,这个DataFrame结果可能比你想要的信息显示得更多。

如果你想对这个结果进行过滤,只想显示“五数概括法”(five-number summary)的信息,你可以使用loc函数并传递"min"到"max"的切片:

图片

如果你不是对所有列都感兴趣,你也可以传递列名的切片:

图片

MultiIndexed Series重塑

Titanic数据集的Survived列由1和0组成,因此你可以对这一列计算总的存活率:

图片

如果你想对某个类别,比如“Sex”,计算存活率,你可以使用groupby():

图片

如果你想一次性对两个类别变量计算存活率,你可以对这些类别变量使用groupby():

图片

该结果展示了由Sex和Passenger Class联合起来的存活率。它存储为一个MultiIndexed Series,也就是说它对实际数据有多个索引层级。

这使得该数据难以读取和交互,因此更为方便的是通过unstack()函数将MultiIndexed Series重塑成一个DataFrame:

图片

该DataFrame包含了与MultiIndexed Series一样的数据,不同的是,现在你可以用熟悉的DataFrame的函数对它进行操作。

创建数据透视表

如果你经常使用上述的方法创建DataFrames,你也许会发现用pivot_table()函数更为便捷

图片

想要使用数据透视表,你需要指定索引(index), 列名(columns), (values)和聚合函数(aggregation function)。

数据透视表的另一个好处是,你可以通过****设置margins=True轻松地将行和列都加起来

图片

这个结果既显示了总的存活率,也显示了Sex和Passenger Class的存活率。

最后,你可以创建交叉表(cross-tabulation),只需要将聚合函数由"mean"改为"count":

图片

这个结果展示了每一对类别变量组合后的记录总数。

连续数据转类别数据

让我们来看一下Titanic数据集中的Age那一列:

图片

它现在是连续性数据,但是如果我们想要将它转变成类别数据呢?

一个解决办法是对年龄范围打标签,比如"adult", “young adult”, “child”。实现该功能的最好方式是使用cut()函数

图片

这会对每个值打上标签。0到18岁的打上标签"child",18-25岁的打上标签"young adult",25到99岁的打上标签“adult”。

注意到,该数据类型为类别变量,该类别变量自动排好序了(有序的类别变量)。

Style a DataFrame

上一个技巧在你想要修改整个jupyter notebook中的显示会很有用。但是,一个更灵活和有用的方法是定义特定DataFrame中的格式化(style)。

让我们回到stocks这个DataFrame:

图片

我们可以创建一个格式化字符串的字典,用于对每一列进行格式化。然后将其传递给DataFrame的style.fORMat()函数:

图片

注意到,Date列是month-day-year的格式,Close列包含一个$符号,Volume列包含逗号。

我们可以通过链式调用函数来应用更多的格式化:

图片

我们现在隐藏了索引,将Close列中的最小值高亮成红色,将Close列中的最大值高亮成浅绿色。

这里有另一个DataFrame格式化的例子:

图片

Volume列现在有一个渐变的背景色,你可以轻松地识别出大的和小的数值。

最后一个例子:

图片

现在,Volumn列上有一个条形图,DataFrame上有一个标题。

请注意,还有许多其他的选项你可以用来格式化DataFrame。

额外技巧

Profile a DataFrame

假设你拿到一个新的数据集,你不想要花费太多力气,只是想快速地探索下。那么你可以使用****pandas-profiling这个模块

在你的系统上安装好该模块,然后使用ProfileReport()函数,传递的参数为任何一个DataFrame。它会返回一个互动的html报告:

  1. 第一部分为该数据集的总览,以及该数据集可能出现的问题列表
  2. 第二部分为每一列的总结。你可以点击"toggle details"获取更多信息
  3. 第三部分显示列之间的关联热力图
  4. 第四部分为缺失值情况报告
  5. 第五部分显示该数据及的前几行

使用示例如下(只显示第一部分的报告):

图片

以上就是Python数据处理的26个Pandas实用技巧总结的详细内容,更多关于Python Pandas技巧的资料请关注编程网其它相关文章!

--结束END--

本文标题: Python数据处理的26个Pandas实用技巧总结

本文链接: https://www.lsjlt.com/news/140333.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python数据处理的26个Pandas实用技巧总结
    目录从剪贴板中创建DataFram将DataFrame划分为两个随机的子集多种类型过滤DataFrameDataFrame筛选数量最多类别处理缺失值一个字符串划分成多列Series扩...
    99+
    2022-11-13
  • python数据处理67个pandas函数总结看完就用
    目录导⼊数据导出数据查看数据数据选取数据处理数据分组、排序、透视数据合并不管是业务数据分析 ,还是数据建模。数据处理都是及其重要的一个步骤,它对于最终的结果来说,至关重...
    99+
    2022-11-12
  • python pandas处理excel表格数据的常用方法总结
    目录前言1、读取xlsx表格:pd.read_excel()2、获取表格的数据大小:shape3、索引数据的方法:[ ] / loc[] / iloc[]4、判断数据为空:np.is...
    99+
    2022-11-11
  • Python数据处理的三个实用技巧分享
    目录1 Pandas 移除某列2 统计标题单词数3 Genre 频次统计我使用的 Pandas 版本如下,顺便也导入 Pandas 库。 >>> import pa...
    99+
    2022-11-13
  • Python数据预处理常用的5个技巧
    目录前言数据集示例 1示例 2示例 3示例 4示例 5总结前言 我们知道数据是一项宝贵的资产,近年来经历了指数级增长。但是原始数据通常不能立即使用,它需要进行大量清理和转换。 Pan...
    99+
    2022-11-13
  • Pandas中常用的七个时间戳处理函数使用总结
    目录1、查找特定日期的某一天的名称2、执行算术计算3、使用时区信息来操作转换日期时间4、使用日期时间戳5、创建日期系列6、操作日期序列7、使用时间戳数据对数据进行切片在零售、经济和金...
    99+
    2022-11-10
  • 三个Python常用的数据清洗处理方式总结
    目录1. strip函数清除空格2. duplicated函数清除重复数据3. 数据缺失值补全4. 数据保存关于python数据处理过程中三个主要的数据清洗说明,分别是缺失值/空格/...
    99+
    2022-12-20
    Python数据清洗处理 Python数据清洗
  • Python数据处理的实用技巧有哪些
    今天小编给大家分享一下Python数据处理的实用技巧有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。我使用的 Panda...
    99+
    2023-06-29
  • Python 数据处理更容易的12个辅助函数总结
    目录Numpy 的 6 种高效函数argpartition()allclose()clip()extract()where()percentile()Pandas 数据统计...
    99+
    2022-11-12
  • 详解Python中数据处理的方法总结及实现
    目录背景常用数据增强方法1、Compose2、RandomHflip3、RandomVflip4、RandomCrop5、Normalize6、Rotate7、RandomRotat...
    99+
    2022-11-11
  • Python数据预处理常用的技巧有哪些
    本篇内容介绍了“Python数据预处理常用的技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!数据集这是一个包含脏数据的示例数据框让我...
    99+
    2023-06-29
  • Python 处理大数据重定向:5个必须知道的技巧
    在现代计算机时代,数据量已经变得越来越大。因此,如何处理大数据并且进行有效的分析,已经成为了每个数据科学家的必修课。Python 作为一种流行的编程语言,它的高效性和灵活性赢得了越来越多的关注。Python 处理大数据时,经常需要进行重定...
    99+
    2023-10-18
    大数据 重定向 load
  • Python处理字符串的常用函数实例总结
    目录前言 字符串都有哪些操作?第一类判断识别字符串第二类字符串编辑的操作第三类:字符串跟字节串的互转总结前言 今天我们说了字符串的基础,格式化,这次我们讲解字符串的常用函数...
    99+
    2022-11-12
  • Linux脚本操作的数据处理技巧与Python实现
    Linux脚本操作的数据处理技巧与Python实现引言:在日常工作中,数据处理是一个重要的环节。而在Linux系统中,使用脚本进行数据处理是非常高效的方法。本文将介绍一些在Linux脚本操作中常用的数据处理技巧,并结合Python语言,给出...
    99+
    2023-10-22
    Python Linux 脚本 数据处理
  • 从 bash 到 Python:掌握实时数据处理的关键技巧
    在现代科技的发展中,数据处理越来越成为了一项重要的技能。尤其是在实时数据处理领域,数据处理的速度和准确性更是至关重要。而在这个领域中,bash 和 Python 都是广泛使用的工具。本文将介绍一些关键技巧,帮助你从 bash 到 Pyth...
    99+
    2023-11-15
    实时 关键字 bash
  • 一文掌握 Python、bash 和关键字的实时数据处理技巧
    在当今数据爆炸的时代,处理实时数据已成为了许多企业所必须的工作。在这篇文章中,我们将介绍使用 Python、bash 和关键字来处理实时数据的技巧。 一、Python Python 是一种高级编程语言,它广泛用于数据分析、人工智能、网络编...
    99+
    2023-11-14
    实时 关键字 bash
  • Python 开发技术中 NumPy 函数的实用技巧,让你轻松应对数据处理挑战!
    Python 是一种高级编程语言,广泛应用于数据科学、机器学习、人工智能等领域。NumPy 是 Python 中的一个重要的数学库,提供了丰富的数学函数和数组操作功能,是数据处理和科学计算中不可或缺的一部分。在本文中,我们将介绍一些 Nu...
    99+
    2023-06-03
    开发技术 numy 函数
  • Python编程技巧:异步编程在大数据处理中的应用
    在大数据处理中,异步编程已经成为了不可或缺的一部分。Python作为一种流行的编程语言,也提供了异步编程的支持。在本文中,我们将探讨Python中异步编程的应用,以及一些编程技巧和示例代码。 什么是异步编程? 异步编程是一种编程模式,它允...
    99+
    2023-08-04
    索引 异步编程 大数据
  • 用 Python IDE 在 Linux 上处理大数据:你需要知道的关键技巧!
    当今,大数据已经成为了许多企业的核心业务之一,而处理大数据的能力也成为了一种必备技能。Python 作为一种流行的编程语言,其强大的数据处理能力在处理大数据方面也表现出色。在 Linux 环境下,Python 编程环境的搭建和使用也是十分重...
    99+
    2023-07-28
    ide linux 大数据
  • 使用Go语言开发实时数据处理系统的方法与技巧
    使用Go语言开发实时数据处理系统的方法与技巧随着信息时代的到来,实时数据处理成为了众多企业和组织中的一项重要任务。在这个快节奏、大数据的时代,如何高效、准确地处理海量的数据成为了一项关键技术。而Go语言作为一门高效、并发处理能力强大的编程语...
    99+
    2023-11-20
    实时数据处理 Go语言开发 方法与技巧
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作