Pandas「一行代码」操作精选,数据科学家必备工具。

2023-12-26 15:30:08


前言

在这里插入图片描述

随着数据分析需求的增加,如何快速、高效地处理和分析数据成为一个值得探讨的问题。

本文作者分享了4个Pandas的内置函数,可以仅使用一行代码完成这些特定的数据处理任务: (1) 将列表转换为字典 (2) 使用JSON文件创建DataFrame (3) 使用explode函数拆分嵌套的列表 (4) 使用combine_first函数填补DataFrame中的缺失值。

通过合理利用Pandas提供的内置函数,可以极大地提升数据处理和分析的效率。数据科学工作者有必要对这些函数进行学习和练习。

pandas是一个非常实用的Python数据分析工具包,适用于处理和分析各种类型的数据,包括结构化数据、时间序列数据和面板数据等。它在数据清洗、数据处理和数据分析方面具有很高的效率和灵活性,是Python数据科学领域中不可或缺的工具之一。

在这篇文章中,我将分享使用Pandas可以在一行代码中完成的4个操作。相信本文的内容会给各位读者带来惊喜~

一、将列表转换为字典

假如有一个Python列表,我们想要知道元素的分布情况,具体一点说,想看有哪些唯一的元素及其在列表中出现的次数。

Python字典就是以这种格式存储数据的好方法。其中,列表中的元素将作为字典的键,出现次数将作为值。

通过使用value_counts()to_dict()函数,我们可以仅使用一行代码就完成这个任务。

下面给出简单的代码示例来演示这种方法:

import pandas as pd

grades = ["A", "A", "B", "B", "A", "C", "A", "B", "C", "A"]

pd.Series(grades).value_counts().to_dict()

# output
{'A': 5, 'B': 3, 'C': 2}

首先,我们将列表转换为Pandas Series,这是Pandas的一维数据结构。然后应用value_counts()函数来获取Series中的各唯一元素及其频率。最后,将输出转换为字典。

二、使用 JSON 文件创建 DataFrame

JSON是一种常用于存储和传递数据的文件格式。例如,当我们从应用程序接口(API)请求数据时,数据很可能是以 JSON 格式传递。

当我们清洗、处理或分析数据时,通常希望它们以表格的格式呈现(即类似表格的数据结构)。借助 json_normalize() 函数,我们只需一次操作就能将JSON格式的对象转换为Pandas DataFrame

假设数据存储在名为 data.json 的 JSON 文件中。我们首先按如下方式读取它:

import json

with open("data.json") as f:
    data = json.load(f)

data
# output
{'data': [{'id': 101,
   'category': {'level_1': 'code design', 'level_2': 'method design'},
   'priority': 9},
  {'id': 102,
   'category': {'level_1': 'error handling', 'level_2': 'exception logging'},
   'priority': 8}]}

如果我们将这个变量(data)传递给DataFrame构造函数,它将创建一个如下所示的DataFrame,这显然不是我们想要的格式:

df = pd.DataFrame(data)

img

但是,如果我们使用json_normalize()函数并提供数据的路径,就能得到一个漂亮而干净的DataFrame:

df = pd.json_normalize(data, "data")

img

三、_explode_函数

可能有这样一种需求:我们有一个与特定数据集相匹配的 Python 列表。但我们需要重新格式化该列表,使列表中的每个元素都是单独的一行。

下图能够较好地展示上文的需求内容:

img

可以想到许多不同的方法来完成这项需求。其中最简单(可能是最简单)的方法就是使用 explode 函数。让我们看看这个函数是如何使用的。

假如有以下 DataFrame:

img

然后使用explode函数,并指定要拆分的列名:

df_new = df.explode(column="data").reset_index(drop=True)

img

reset_index()函数为生成的DataFrame分配一个新的整数索引。否则,拆分之前的索引将被保留(即所有键值为A的行的索引都为0)。

四、 Combine first

combine_first()函数是为了某个特定情况而设置的,但其极大地简化了该特定任务的完成。

使用combine_first()函数的这种特定情况是:

想从 DataFrame 中提取一列值。如果该列中有缺失值,则需要用另一列中提取值来保证输出结果没有缺失值。

在这方面,它与SQL中的COALESCE函数作用相同。

先创建一个包含一些缺失值的 DataFrame 示例:

df = pd.DataFrame(
    {
        "A": [None, 0, 12, 5, None], 
        "B": [3, 4, 1, None, 11]
    }
)

img

如果该列有一行值缺失(即 NaN),就用 B 列中同一行的值来填补。

df["A"].combine_first(df["B"])

# output
0     3.0
1     0.0
2    12.0
3     5.0
4    11.0
Name: A, dtype: float64

正如我们在输出结果中看到的,A 列的第一行和最后一行取自 B 列。

如果有 3 列需要使用,我们可以使用链式的combine_first()函数。如果 B 列的相应行也是 NaN,则从 C 列取值。

df["A"].combine_first(df["B"]).combine_first(df["C"])

我们也可以在 DataFrame 层使用 combine_first() 函数。在这种情况下,所有缺失值都将由第二个 DataFrame 中的相应值(即同一行、同一列)来填补。

五、后语

Pandas 是我用过的功能最全面的工具之一。从计算简单的统计数据到高度复杂的数据清理过程,Pandas 总能帮助我快速解决任务。我遇到的唯一问题是在处理超大数据集时表现不太好,这似乎是 Pandas 唯一的缺点。不过,最近有了一些改进,使 Pandas 在处理大型数据集时更加高效。我相信这对每一个喜欢使用这个伟大工具的人来说都是好消息。
在这里插入图片描述

感谢您的阅读。请评论区畅所欲言~


关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,希望提供给想学习 Python 的小伙伴们一点帮助!

保存图片微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python基础学习视频

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

三、精品Python学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、Python工具包+项目源码合集
①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

六、Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以保存图片微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

文章来源:https://blog.csdn.net/2301_80240808/article/details/135220599
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。