当前位置: 首页 > 科技观察

盘点66个Pandas函数,轻松搞定“数据清洗”!

时间:2023-03-22 13:15:17 科技观察

Pandas是一个基于NumPy的工具,旨在解决数据分析任务。它提供了大量的函数和方法,可以让我们快速方便地处理数据。数据预览对于探索性数据分析,在进行数据分析之前,需要先查看数据的整体概况。info()方法用于查看数据集信息,describe()方法会返回描述性统计信息。这两个功能大家应该都不陌生。describe方法默认只给出数值型变量的常用统计信息。如果想对DataFrame中的每个变量进行汇总统计,可以将参数include设置为all。head()方法和tail()方法分别显示前n行和后n行数据。如果想随机查看N行数据,可以使用sample()方法。df.sample(3)输出:如果要查看数据中每一列的数据类型,可以使用.dtypes;如果你想查看所有的列名,你可以使用.columns。df.columnsoutput:Index(['date','sales'],dtype='object')前面介绍的函数主要是读取数据集的数据信息。如果想获取数据集的大小(长宽),可以使用.shape方法。df.shapeoutput:(5,2)另外len()可以检查一列的行数,count()可以检查列中有效值的个数,排除无效值().缺失值和重复值Pandas在清洗数据时,一般会使用isnull()方法来判断缺失值。另外,isnull().any()会判断哪些“列”有缺失值,isnull().sum()用于统计空列的个数。df.isnull().any()output:DateFalseSalesTrueedtype:bool当在“Sales”列中发现缺失值时,处理方式要么是deletedropna(),要么是fillfillna().df.fillna(50)输出:Pandas在清洗数据时,一般会使用Duplicated()方法来判断重复值。如果想直接删除重复值,可以使用drop_duplicates()方法。这里比较常见,就不过多展示了。数值数据操作我们在处理数据的时候,会遇到批量替换。replace()是一个很好的解决方案。不仅支持替换全部或某一行,还支持替换指定值或多个指定值(以字典的形式),还可以使用正则表达式进行替换。df["Number"].replace(r'BA.$',value='NEW',regex=True,inplace=True)输出:在Pandas模块中调用Rank()方法可以实现数据排序。df["rank"]=df.rank(method="dense").astype("int")输出:rank()方法中的method参数,它有5个常用选项,可以帮助我们实现不同排名情况。clip()方法用于截断[1]超出或低于某个数字的值,以确保该值在某个范围内。例如,每个月的延迟天数必须在0-31天之间。df["Numberofdayslate"]=df["Numberofdayslate"].clip(0,31)唯一值,unique()以数组的形式返回列的所有唯一值,和nunique()返回唯一值的数量。df["gender"].unique()df["gender"].nunique()输出:在数值型数据操作中,apply()函数是对DataFrame的行或列应用自定义函数;applymap()函数的作用是对DataFrame的所有元素应用一个自定义函数。它们也常与匿名函数lambda一起使用。df["quantity"].apply(lambdax:x+1)输出:文本数据操作我们介绍了一个经常被忽视的:Pandas文本数据处理。在处理文本数据时,我们会应用大量的字符串函数对一列文本数据进行操作[2]。函数方法使用说明cat字符串拼接contains判断字符串是否包含给定字符startswith/endswith判断字符串是否开头/结尾...get获取指定位置的字符串len计算字符串长度大小写转换pad/center将给定的字符添加到字符串的左侧、右侧或两侧repeat重复字符串多次slice_replace使用给定的字符串替换指定位置的字符多列strip、rstrip和lstrip。findall使用正则表达式匹配字符串并返回搜索结果列表。extract和extractall接受正则表达式并提取匹配的字符串(一定要加括号))示例:df.insert(2,"Name",df["LastName"].str.cat(df["Name"],sep=""))输出:df["手机号码"]=df["手机号码"].str.slice_replace(3,7,"*"*4)输出:df["地址"].str.extract("([\u4e00-\u9fa5]+)")output:row/column在操作数据清洗时,会删除空值的行。这时候DataFrame或者Series数据就不再是一个连续的索引了。您可以使用reset_index()来重置索引。df.reset_index(drop=True)output:rename()重命名用于更改行和列的标签,即行和列的索引。可以传入字典,也可以传入函数,在数据预处理中比较常用。df.rename(columns={'mark':'sell'},inplace=True)输出:行列转置,我们可以通过T属性获取转置后的DataFrame。df.T输出:删除行和列,可以使用drop()。df.drop(columns=["mark"])输出:数据分析师在处理数据时经常会遇到长表和宽表的转换。这也是一道常见的数据分析面试题。melt()方法可以将宽表转化为长表,即表格数据转化为树状数据。df.melt(id_vars="name",var_name="subject",value_name="grade")输出:pivot()方法可以将长表转化为宽表,即树型数据转化为表格数据。df.pivot(index='name',columns='subject',values='grade')output:Pivot()其实是用set_index()创建了层级索引,然后用unstack()重塑df1.set_index(['name','subject']).unstack('subject')数据分组和数据透视表是一个共同需求,groupby()方法可以用于数据分组。df.groupby("Subject").mean()由于Pivot_table()数据透视表的参数比较多,我们不再用案例来演示。具体用法请参考下图。如果数据过滤是过滤行和列,通常有以下几种方法:有时我们需要根据条件选择一些列和一些行。一般常用的方法有:操作语法返回结果选择列df[col]按索引选择行df.loc[label]系列按数值索引选择行df.iloc[loc]系列使用切片选择行df[:5]DataFrameFilterRowsbyExpression[3]df[bool_vec]DataFrame此外,还有许多方法/函数可用于“数据过滤”。如果想直接过滤包含特定字符的字符串,可以使用contains()方法。例如,过滤掉户籍地址栏中所有包含字符“黑龙江”的行。df[df["家庭住址"].str.contains("黑龙江")]query()查询方法也可以用来过滤数据,比如查询“中文”分数大于的行记录“数学”成绩。df.query("Chinese>English")output:select_dtypes()方法可以用来过滤某些数据类型的变量或列。例如,我们只选择数据类型为“int64”的列。df.select_dtypes("int64")output:isin()接受一个列表,判断列中的元素是否在列表中。name_list=["张三","李四"]df[df["name"].isin(name_list)]输出:对数值数据进行统计操作除了对数值数据进行统计操作时的算术运算和比较之外还有budget具有各种常用的汇总统计操作函数,如下表所示。函数方法用法解释count非NaN数据项countsumsummeanmeanmedianmedianmodemodemax最大值min最小值std标准差varvariancequantilequantileskew返回偏度系数kurt返回峰度系数例子:df["Chinese"].max()output:155最后说一个比较常用的统计运算函数——累加cumsum()。df["cumulativesales"]=df["sales"].cumsum()output:注:cumprod()方法指的是连续乘法,与连续加法相同,但使用频率较低。今天我们统计了66个Pandas函数的合集,但其实还有很多函数本文没有介绍,包括时间序列、数据表的拼接和join等等。另外,像describe()这样大家很熟悉的方法,都省略了代码演示。如果你在工作和生活中有对“数据清洗”非常有用的Pandas功能,也可以在评论区交流。参考[1]小小明-Pandas剪辑和替换正则替换:https://blog.csdn.net/as604049322/article/details/105985763[2]经常被忽视的:Pandas文本数据处理:https://mp.weixin。qq.com/s/Tdcb6jlyCc7XlQWZlvEd_w[3]深入讲解Pandas:使用Python进行数据处理与分析