数据分析Pyjanitor清洗包

大邓和他的Python

共 3658字,需浏览 8分钟

 · 2021-12-01

pyjanitor是参照R语言janitor包语法,为Python量身定制的数据清洗包,即可清洗数据,又可让代码简洁干净。

安装

!pip3 install pyjanitor

为什么用janitor?

数据预处理通常由一系列步骤组成,这些步骤涉及将原始数据转换为可理解/可用的格式。这一系列的步骤需要按照一定的顺序运行才能成功。我们以基础数据文件为起点,对其执行操作,例如删除空行/空行、用其他值替换它们、添加/重命名/删除数据列、过滤行等。更正式地说,这些步骤以及它们的关系和依赖关系通常被称为有向无环图 (DAG)。

pandas API 对 Python 数据科学生态系统非常宝贵,它实现了方法子集的方法链作为 API 的一部分。例如,重置索引 (.reset_index())、删除空值 (.dropna()) 等都是通过适当的 pd.DataFrame 方法调用来完成的。

受 R 统计语言生态系统 dplyr 包的易用性和表达能力的启发,我们将 pyjanitor 开发为语法包,用于为 Pandas 用户表达数据处理 DAG。

为了实现这一点,我们需要调用声明式的操作 替换为允许 逻辑顺序的方法链。让我们看看下面带注释的示例。首先,这里是数据清理路径的文字描述:

  1. 创建一个dataframe。
  2. 删除一列。
  3. 删除两个特定列中具有空值的行。
  4. 重命名另外两列。
  5. 添加一个新列。

让我们导入一些库并从本示例的一些示例数据开始:

# Libraries
import numpy as np
import pandas as pd
import janitor

# Sample Data curated for this example
company_sales = {
    'SalesMonth': ['Jan''Feb''Mar''April'],
    'Company1': [150.0200.0300.0400.0],
    'Company2': [180.0250.0, np.nan, 500.0],
    'Company3': [400.0500.0600.0675.0]
}

常见的Pandas实现方式

下面是传统的Pandas方式

# The Pandas Way

# 1. 创建一个dataframe
df = pd.DataFrame(company_sales)

# 2.删除一列。Say 'Company1'
del df['Company1']

# 3. 删除两个特定列中具有空值的行。 'Company2' and 'Company3'
df = df.dropna(subset=['Company2''Company3'])

# 4. 重命名另外两列。 将'Company2' 改为 'Amazon'; 将 'Company3' 改为 'Facebook'
df = df.rename({'Company2''Amazon',
                'Company3''Facebook'},
               axis=1)

# 5. 添加一个新列 'Google'
df['Google'] = [450.0550.0800.0]

df
|      | SalesMonth | Amazon | Facebook | Google |
| ---: | :--------- | -----: | -------: | -----: |
|    0 | Jan        |    180 |      400 |    450 |
|    1 | Feb        |    250 |      500 |    550 |
|    3 | April      |    500 |      675 |    800 |

稍微高级一点Pandas实现方式

稍微高级一点的用户可能会利用函数式 API:

df = (
    pd.DataFrame(company_sales)
    .drop(columns="Company1")
    .dropna(subset=["Company2""Company3"])
    .rename(columns={"Company2""Amazon""Company3":"Facebook"})
    .assign(Google=[450.0550.0800.0])
)

df
|      | SalesMonth | Amazon | Facebook | Google |
| ---: | :--------- | -----: | -------: | -----: |
|    0 | Jan        |    180 |      400 |    450 |
|    1 | Feb        |    250 |      500 |    550 |
|    3 | April      |    500 |      675 |    800 |

PyJanitor实现方式

借助pyjanitor库,我们可以使用方法名链式代码

df = (
    pd.DataFrame(company_sales)
    .remove_columns(['Company1'])
    .dropna(subset=["Company2""Company3"])
    .rename_column("Company2""Amazon")
    .rename_column("Company3""Facebook")
    .add_column("Google", [450.0550.0800.0])

)

df
|      | SalesMonth | Amazon | Facebook | Google |
| ---: | :--------- | -----: | -------: | -----: |
|    0 | Jan        |    180 |      400 |    450 |
|    1 | Feb        |    250 |      500 |    550 |
|    3 | April      |    500 |      675 |    800 |

因此,pyjanitor 的词源与“清洁度”有双重关系。首先,它是关于使用方便的数据清理例程扩展 Pandas。其次,它是关于为常见的 Pandas 例程提供更清晰、方法链接、基于动词的 API。


pyjanitor更多功能

  • 清理列名(多索引是可能的!)
  • 删除空行和列
  • 识别重复条目
  • 将列编码为分类
  • 将数据拆分为特征和目标(用于机器学习)
  • 添加、删除和重命名列
  • 将多列合并为一列
  • 日期转换(从 matlab、excel、unix)到 Python 日期时间格式
  • 将具有分隔的分类值的单个列扩展为虚拟编码变量
  • 基于分隔符连接和分离列
  • 用于根据列上的查询过滤数据框的语法糖
  • 金融、生物、化学、工程和 pyspark 的实验子模块

代码下载

https://github.com/hiDaDeng/DaDengAndHisPython/blob/master/20211125pyjanitor学习.ipynb

近期文章

视频专栏课 | Python网络爬虫与文本分析

如何在DataFrame中使用If-Else条件语句创建新列

BERTopic 主题建模库 | 建议收藏

KeyBERT库 | 自动挖掘文本中的关键词

DataShare | 6000+个股票的每日财经新闻  

SmartScraper | 简单、自动、快捷的Python网络爬虫

SHAP | 机器学习模型解释库

读完本文你就了解什么是文本分析

文本分析在经管领域中的应用概述

综述:文本分析在市场营销研究中的应用

在会计研究中使用Python进行文本分析

文本分析方法在《管理世界》(2021.5)中的应用

中文金融情感词典发布啦 | 附代码

wordexpansion包 | 新增词向量法构建领域词典

语法最简单的微博通用爬虫weibo_crawler

hiResearch 定义自己的科研首页

SciencePlots | 科研样式绘图库

plydata库 | 数据操作管道操作符>>

plotnine: Python版的ggplot2作图库

Wow~70G上市公司定期报告数据集

漂亮~pandas可以无缝衔接Bokeh  

YelpDaset: 酒店管理类数据集10+G

浏览 31
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报