简介

Python 正迅速成为数据科学家们更为钟爱的编程语言。形成该现状的理由非常充分:Python 提供了一种覆盖范围更为广阔的编程语言生态系统,以及具有一定计算深度且性能良好的科学计算库。如果您是 Python 初学者,建议首先看下Python 学习路线。

在 Python 自带的科学计算库中,Pandas 模块是最适于数据科学相关操作的工具。它与 Scikit-learn 两个模块几乎提供了数据科学家所需的全部工具。本文着重介绍了 Python 中数据处理12 种方法。此前的文章里也分享了一些技巧和经验,这些将有助于您提高工作效率

在本文开始前,推荐读者首先了解一些数据挖掘的相关代码。为使本文更易于理解,我们事先选定了一个数据集以示范相关操作和处理方法。

数据集来源:本文采用的是贷款预测问题的数据集。请下载该数据集并开始本文内容。

panda_1

 

让我们开始吧

首先导入相关模块并加载数据集到 Python 环境中:

123 import pandas as pdimport numpy as npdata = pd.read_csv(\”train.csv\”, index_col=\”Loan_ID\”)

#1 – 布尔索引

如果需要以其它列数据值为条件过滤某一列的数据,您会怎么处理?例如建立一个列表,列表中全部为未能毕业但曾获得贷款的女性。这里可以使用布尔索引,代码如下:

12 data.loc[(data[\”Gender\”]==\”Female\”) & (data[\”Education\”]==\”Not Graduate\”) & (data[\”Loan_Status\”]==\”Y\”), [\”Gender\”,\”Education\”,\”Loan_Status\”]]

1.-boolean-indexing

 

更多内容请参阅:利用 Pandas 模块进行选择和索引

#2 – Apply 函数

Apply 函数是处理数据和建立新变量的常用函数之一。在向数据框的每一行或每一列传递指定函数后,Apply 函数会返回相应的值。这个由 Apply 传入的函数可以是系统默认的或者用户自定义的。例如,在下面的例子中它可以用于查找每一行和每一列中的缺失值。

1234567891011 #Create a new function:def num_missing(x):  return sum(x.isnull()) #Applying per column:print \”Missing values per column:\”print data.apply(num_missing, axis=0) #axis=0 defines that function is to be applied on each column #Applying per row:print \”nMissing values per row:\”print data.apply(num_missing, axis=1).head() #axis=1 defines that function is to be applied on each row

3-apply

这样我们就得到了所需的结果。

注:由于输出结果包含多行数据,第二个输出函数使用了 head() 函数以限定输出数据长度。在不限定输入参数时 head() 函数默认输出 5 行数据。

更多内容请参阅:Pandas 参考(apply 函数)

#3 – 填补缺失值

fillna() 函数可一次性完成填补功能。它可以利用所在列的均值/众数/中位数来替换该列的缺失数据。下面利用“Gender”、“Married”、和“Self_Employed”列中各自的众数值填补对应列的缺失数据。

123 #First we import a function to determine the modefrom scipy.stats import modemode(data[\’Gender\’])

输出结果为:ModeResult(mode=array([‘Male’], dtype=object), count=array([489]))

输出结果返回了众数值和对应次数。需要记住的是由于可能存在多个高频出现的重复数据,因此众数可以是一个数组。通常默认使用第一个众数值:

1 mode(data[\’Gender\’]).mode[0]

4.2-mode2

现在可以进行缺失数据值填补并利用#2方法进行检查。

1234567 #Impute the values:data[\’Gender\’].fillna(mode(data[\’Gender\’]).mode[0], inplace=True)data[\’Married\’].fillna(mode(data[\’Married\’]).mode[0], inplace=True)data[\’Self_Employed\’].fillna(mode(data[\’Self_Employed\’]).mode[0], inplace=True) #Now check the #missing values again to confirm:print data.apply(num_missing, axis=0)

4.3-after-impute

至此,可以确定缺失值已经被填补。请注意,上述方法是最基本的填补方法。包括缺失值建模,用分组平均数(均值/众数/中位数)填补在内的其他复杂方法将在接下来的文章中进行介绍。

更多内容请参阅:Pandas 参考( fillna 函数)

#4 – 数据透视表

Pandas 可建立 MS Excel 类型的数据透视表。例如在下文的代码段里,关键列“LoanAmount” 存在缺失值。我们可以根据“Gender”,“Married”和“Self_Employed”分组后的平均金额来替换。 “LoanAmount”的各组均值可由如下方法确定: