数据科学家必备东西:Pandas「一行代码」操作精选

原文链接:towardsdatascience.com/4-pandas-on…

原文作者:Soner Yldrm

译者:Regan Yue

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

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

经过合理利用Pandas提供的内置函数,能够极大地提高数据处理和剖析的功率。数据科学工作者有必要对这些函数进行学习和练习。

数据科学家必备东西:Pandas「一行代码」操作精选

Photo by Tom Bradley on Unsplash

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)

数据科学家必备东西:Pandas「一行代码」操作精选

可是,假如咱们运用json_normalize()函数并提供数据的路径,就能得到一个漂亮而洁净的DataFrame:

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

数据科学家必备东西:Pandas「一行代码」操作精选

三、explode函数

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

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

数据科学家必备东西:Pandas「一行代码」操作精选

能够想到许多不同的办法来完结这项需求。其间最简略(可能是最简略)的办法便是运用 explode 函数。让咱们看看这个函数是如何运用的。

假如有以下 DataFrame:

数据科学家必备东西:Pandas「一行代码」操作精选

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

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

数据科学家必备东西:Pandas「一行代码」操作精选

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

数据科学家必备东西:Pandas「一行代码」操作精选

假如该列有一行值缺失(即 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 在处理大型数据集时更加高效。我信任这对每一个喜爱运用这个伟大东西的人来说都是好消息。

感谢您的阅读。请谈论区各抒己见~