Pandas进阶,4个高效的单行代码

高效完成特定任务的4个Pandas单行代码,以快速简单的方式完成复杂任务。

微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩

图片

简介

图片

第三方库是为了满足某种需求而被创建和开发的。开发者意识到一个问题,并想出了一个解决方案来帮助解决它。这就是工具的产生方式。

为现有工具添加新功能也是如此。新功能添加的好坏和快慢取决于工具的受欢迎程度和背后的团队。

毫无疑问,Pandas拥有一个高度活跃的社区,使其成为数据科学生态系统中最受欢迎的数据分析和清洗库之一。

Pandas具有解决特定问题和使用案例的功能,这些功能必然是社区中活跃使用者提出的需求。

在这里,我们将与大家分享4个可以使用一行代码在Pandas中完成的操作。这些操作帮助开发者高效地解决了特定任务。

1、从列表创建字典

假设有一个项目列表,想要查看它们的分布情况。更具体地说,是想查看列表中的唯一值及其出现次数。

Python字典是以这种格式存储数据的好方法。项目将是字典的键,出现次数将是值。

借助value_countsto_dict函数,这个任务可以在一行代码中完成。

以下是一个简单的示例来演示这种情况:

import pandas as pd

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

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

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

首先将列表转换为Pandas Series,这是Pandas的一维数据结构。然后,应用value_counts函数,在Series中获取唯一值及其在系列中的频率。最后,将输出转换为字典。

2、从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
# 输出
{'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}]}

如果将这个变量传递给DataFrame构造函数,它将创建一个如下所示的DataFrame,这显然不是一个可用的格式:

df = pd.DataFrame(data)

图片

df

但是,如果使用json_normalize函数并提供记录路径,将会得到一个格式整洁、清晰的DataFrame:

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

图片

df

3、Explode函数

考虑这样一种情况:有一个与特定记录相匹配的项目列表。需要重新格式化该列表,使得列表中的每个项目都有单独的一行。

下面的图示说明了需要完成的内容:

图片

可以想出许多不同的方法来解决这个任务。其中最简单的之一(也可能是最简单的)就是explode函数。接下来看看它是如何工作的。

现在有以下DataFrame:

图片

我们将使用explode函数并指定要拆分的列名:

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

图片

df_new

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

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

图片

df

我们需要列A中的数据。如果有一行有缺失值(即NaN),希望用同一行中列B的值来填充它。

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

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

从输出中可以看出,列A的第一行和最后一行来自列B。

如果有3列需要使用,可以链接多个combine_first函数。以下一行代码首先检查列A。如果有缺失值,它会从列B中获取。如果列B中对应的行也是NaN,那么它会从列C中获取值。

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

我们还可以在DataFrame级别上使用combine_first函数。在这种情况下,所有缺失值都将由第二个DataFrame中对应的值(即相同行,相同列)来填充。

结语

Pandas是功能最全面的工具之一。从计算简单的统计数据到高度复杂的数据清洗过程,Pandas总是能帮助开发者快速解决任务。

但是在处理非常大的数据集时Pandas会表现不佳,这似乎是Pandas的唯一不足之处。然而,最近Pandas团队已经有了一些进展,使得Pandas在处理大型数据集时更加高效。

推荐书单

《Pandas数据分析》

《Pandas数据分析》详细阐述了与Pandas数据分析相关的基本解决方案,主要包括数据分析导论、使用PandasDataFrame、使用Pandas进行数据整理、聚合Pandas DataFrame、使用Pandas和Matplotlib可视化数据、使用Seabom和自定义技术绘图、金融分析、基于规则的异常检测、Python机器学习入门、做出更好的预测、机器学习异常检测等内容。此外,该书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。

《Pandas数据分析》适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学用书和参考手册。

《Pandas数据分析》icon-default.png?t=N7T8https://item.jd.com/14065178.html

图片

精彩回顾

《数据分析进阶,Databricks集成GitHub Copilot实用指南》

《金融量化交易初探,使用Python实现遗传算法》

《严把数据质量关,用Pandas轻松进行7项基本数据检查》

《Pandas进阶指南,掌握这10个基本函数搞定数据处理(下)》

《Pandas进阶指南,掌握这10个基本函数搞定数据处理(上)》

《15个必知Pandas代码片段,助你精通数据分析》

微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩

访问【IT今日热榜】,发现每日技术热点

  • 34
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值