Pandas 数据清洗实用指南

      数据科学项目中最耗时的部分是数据清洗和准备。幸好有许多强大的工具可以加快此过程。其中之一是 Pandas,它是一个被广泛使用的 Python 数据分析库。在这篇文章中,将介绍一个典型的使用Pandas进行数据清洗的过程,因为通过实践能更容易理解什么是数据清洗。本文由以下四个部分组成:

      1)创建DataFrame

      2)数据概览

      3)处理缺失值

      4)选择数据

      当然,首先需要导入两个库:

      import pandas as pd

      import numpy as np

创建DataFrame

      在现实生活中,大多数情况下是从文件中读取数据,而不是创建 DataFrame。 

#yyds干货盘点#Pandas数据清洗实用指南_数据分析

#yyds干货盘点#Pandas数据清洗实用指南_数据分析_02

数据概览

      Pandas的describe函数提供数值(int或float)列的汇总统计信息。 它计算值的数量并显示平均值、标准值、最小值和最大值以及 25%、50% 和 75% 的分位数。

      df.describe() 

#yyds干货盘点#Pandas数据清洗实用指南_数据分析_03

      尽管所有列的行数相同,但列 d 的计数不同,因为 describe 函数不计算 NaN(缺失)值。value_counts() 显示列中出现次数的值:

      df.c.value_counts()

#yyds干货盘点#Pandas数据清洗实用指南_数据类型_04

      value_counts() 不计算 NaN(缺失)值。

      我们还应该检查数据类型并在我们的分析中考虑它们。 某些功能只能对某些数据类型执行。 我们可以使用 dtypes 轻松检查数据类型:

      df.dtypes

#yyds干货盘点#Pandas数据清洗实用指南_缺失值_05

      ‘d’ 和 ‘e’ 列都有整数,但 ‘d’ 列的数据类型是浮点数。 原因是 d 列中的 NaN 值。 NaN 值被认为是浮点数,因此该列中的整数值被向上转换为浮点数据类型。 

处理缺失值

      处理缺失值是数据清理和准备过程的重要组成部分,因为现实生活中几乎所有数据都带有一些缺失值。在处理缺失值之前,我们需要检查DataFrame中缺失值的数量。这一步很重要,因为行或列中缺失值的比率在如何处理它们方面起着关键作用。isna() 检查条目是否为 NaN(缺失)。与 sum 方法结合使用时,它会给出每列中缺失值的总数:

      df.isna().sum()

#yyds干货盘点#Pandas数据清洗实用指南_数据类型_06

      与 any() 结合使用时,它返回一个布尔值,指示该列中是否有任何缺失值:

      df.isna().any()

#yyds干货盘点#Pandas数据清洗实用指南_数据分析_07

      处理缺失值的方法有很多种,但对于每项任务都没有一个“最佳”选择。 它高度依赖于数据的任务和特征。 我将在这里列出几种不同的处理缺失值的方法。

      我们可以用该列的最大值替换该列中的缺失值:

      df.d.fillna(df.d.max(), inplace=True)

 #yyds干货盘点#Pandas数据清洗实用指南_缺失值_08

 #yyds干货盘点#Pandas数据清洗实用指南_缺失值_09      

      inplace参数一定要设置为True,否则变更将不生效。

      根据情况,如果缺失值太多,我们可能会决定删除一行或一列。 在没有先验知识的情况下填充许多缺失值可能会对我们的分析产生负面影响。 DataFrame 中有 5 列,如果只想保留至少具有 4 个值的样本(行), 换句话说,至少有 2 个缺失值的行将被删除。我们可以使用带有 thresh 参数的 dropna 函数。 Axis 参数用于表示行 (0) 或列 (1)。

      df.dropna(thresh=4, axis=0, inplace=True)

#yyds干货盘点#Pandas数据清洗实用指南_数据_10

#yyds干货盘点#Pandas数据清洗实用指南_数据_11     

      thresh 参数表示行或列不需要删除的非缺失值的数量。

      我们还可以用之前或之后的值填充缺失值。 这种方法多用于时间序列数据。方法参数与’ffill’(向前传播)或‘bfill’(向后传播)参数一起使用:

      df.b.fillna(method=‘ffill’, inplace=True)

#yyds干货盘点#Pandas数据清洗实用指南_数据_12 

#yyds干货盘点#Pandas数据清洗实用指南_数据分析_13

      我们还可以用该列中最常见的值填充缺失值。 Value_counts() 根据值在列中的出现次数对值进行排序。 所以我们可以使用 value_counts() 的索引来得到最常见的值:

      df.c.fillna(df.c.value_counts().index[0], inplace=True)

#yyds干货盘点#Pandas数据清洗实用指南_数据类型_14  

#yyds干货盘点#Pandas数据清洗实用指南_数据清洗_15


选择数据

      iloc 和 loc 允许选择 DataFrame 的一部分。iloc通过位置选择,loc通过标签选择。

      1)选择第二行

      df.iloc[1] 

#yyds干货盘点#Pandas数据清洗实用指南_数据类型_16

      2)选择第一行第二列的值

      df.iloc[0, 1] 

#yyds干货盘点#Pandas数据清洗实用指南_数据类型_17

      3)选择所有行的第三列

      df.iloc[:, 2] 

#yyds干货盘点#Pandas数据清洗实用指南_缺失值_18

      4)选择前两行的第二列

      df.iloc[:2, 1] 

#yyds干货盘点#Pandas数据清洗实用指南_数据类型_19

      5)选择前两行的’b’列

      df.loc[:2, ‘b’]

 #yyds干货盘点#Pandas数据清洗实用指南_缺失值_20


结论

      我在这里介绍的只是 Pandas 在数据分析过程中的一小部分能力,但肯定会对您的项目有用。 试图一次学习所有内容是不合理的。 相反,学习小块并通过实践吸收信息将帮助您建立全面的数据分析技能。