Python学习
50个Pandas高级操作
盘点66个Pandas函数,轻松搞定“数据清洗”!
Python操作Mysql
学习 python requests模块
python怎么用Google AI
Python 连接 redis
本文档使用 MrDoc 发布
-
+
首页
盘点66个Pandas函数,轻松搞定“数据清洗”!
Pandas 是基于NumPy的一种工具,该工具是为解决数据分析任务而创建的。它提供了大量能使我们快速便捷地处理数据的函数和方法。 ## 数据预览 对于探索性数据分析来说,做数据分析前需要先看一下数据的总体概况。info()方法用来查看数据集信息,describe()方法将返回描述性统计信息,这两个函数大家应该都很熟悉了。 ``` describe方法默认只给出数值型变量的常用统计量,要想对DataFrame中的每个变量进行汇总统计,可以将其中的参数include设为all。 ``` head()方法和tail() 方法则是分别显示数据集的前n和后n行数据。如果想要随机看N行的数据,可以使用sample()方法。 ``` df.sample(3) ``` 输出: ![](/media/202307/2023-07-11_101653_0481590.6251983417700037.png) 如果要检查数据中各列的数据类型,可以使用.dtypes;如果想要值查看所有的列名,可以使用.columns。 ``` df.columns ``` 输出: ``` Index(['日期', '销量'], dtype='object') ``` 前面介绍的函数主要是读取数据集的数据信息,想要获得数据集的大小(长宽),可以使用.shape方法。 ``` df.shape ``` 输出: ``` (5, 2) ``` 另外,len()可以查看某列的行数,count()则可以查看该列值的有效个数,不包含无效值(Nan)。 ## 缺失值与重复值 Pandas清洗数据时,判断缺失值一般采用isnull()方法。此外,isnull().any()会判断哪些”列”存在缺失值,isnull().sum()用于将列中为空的个数统计出来。 ``` df.isnull().any() ``` 输出: ``` 日期 False 销量 True dtype: bool ``` 发现“销量”这列存在缺失值后,处理办法要么删除dropna() ,要么填充fillna()。 ``` df.fillna(50) ``` 输出: ![](/media/202307/2023-07-11_101854_4373600.2924250662584925.png) Pandas清洗数据时,判断重复值一般采用duplicated()方法。如果想要直接删除重复值,可以使用drop_duplicates() 方法。此处较为常见,不再过多演示。 ## 数值数据操作 我们在处理数据的时候,会遇到批量替换的情况,replace()是很好的解决方法。它既支持替换全部或者某一行,也支持替换指定的某个或指定的多个数值(用字典的形式),还可以使用正则表达式替换。 ``` df["编号"].replace(r'BA.$', value='NEW', regex=True, inplace = True) ``` ![](/media/202307/2023-07-11_101951_6690270.4633484691900238.png) 在Pandas模块中, 调⽤rank()⽅法可以实现数据排名。 ``` df["排名"] = df.rank(method="dense").astype("int") ``` ![](/media/202307/2023-07-11_102015_6832420.642186160998351.png) rank()⽅法中的method参数,它有5个常⽤选项,可以帮助我们实现不同情况下的排名。 ![](/media/202307/2023-07-11_102041_5549000.1414734149351572.png) clip()方法,用于对超过或者低于某些数的数值进行截断[1],来保证数值在一定范围。比如每月的迟到天数一定是在0-31天之间。 ``` df["迟到天数"] = df["迟到天数"].clip(0,31) ``` ![](/media/202307/2023-07-11_102107_2097740.9899125866875345.png) 唯一值,unique()是以数组形式返回列的所有唯一值,而nunique()返回的是唯一值的个数。 ``` df["gender"].unique() df["gender"].nunique() ``` ![](/media/202307/2023-07-11_102145_5404170.17684581993921322.png) 在数值数据操作中,apply()函数的功能是将一个自定义函数作用于DataFrame的行或者列;applymap()函数的功能是将自定义函数作用于DataFrame的所有元素。他们通常也与匿名函数lambda一起使用。 ``` df["数量"].apply(lambda x: x+1) ``` ![](/media/202307/2023-07-11_102215_2540670.3449981143541542.png) ## 文本数据操作 在对文本型的数据进行处理时,我们会大量应用字符串的函数,来实现对一列文本数据进行操作[2]。 ``` 函数方法 用法释义 cat 字符串的拼接 contains 判断某个字符串是否包含给定字符 startswith/endswith 判断某个字符串是否以...开头/结尾 get 获取指定位置的字符串 len 计算字符串长度 upper、lower 英文大小写转换 pad/center 在字符串的左边、右边或左右两边添加给定字符 repeat 重复字符串几次 slice_replace 使用给定的字符串,替换指定的位置的字符 split 分割字符串,将一列扩展为多列 strip、rstrip、lstrip 去除空白符、换行符 findall 利用正则表达式,去字符串中匹配,返回查找结果的列表 extract、extractall 接受正则表达式,抽取匹配的字符串(一定要加上括号) ``` ![](/media/202307/2023-07-11_102306_6488660.5491451074798253.png) ``` df.insert(2, "姓名", df["姓"].str.cat(df["名"], sep="")) ``` ![](/media/202307/2023-07-11_102344_0736890.06520318632261024.png) ``` df["手机号码"] = df["手机号码"].str.slice_replace(3,7,"*"*4) ``` ![](/media/202307/2023-07-11_102416_9421930.5532073748202686.png) ``` df["地址"].str.extract("([\u4e00-\u9fa5]+)") ``` ![](/media/202307/2023-07-11_102445_1100310.5704032189077438.png) ## 行/列操作 数据清洗时,会将带空值的行删除,此时DataFrame或Series类型的数据不再是连续的索引,可以使用reset_index()重置索引。 ``` df.reset_index(drop=True) ``` ![](/media/202307/2023-07-11_102534_3803070.706546878377979.png) rename()重命名用于更改行列的标签,即行列的索引。可以传入一个字典或者一个函数。在数据预处理中,比较常用。 ``` df.rename(columns={'mark': 'sell'}, inplace=True) ``` ![](/media/202307/2023-07-11_102557_8855620.08265724950930642.png) 行列转置,我们可以使用T属性获得转置后的DataFrame。 ``` df.T ``` ![](/media/202307/2023-07-11_102622_4300790.8536137778661151.png) 删除行列,可以使用drop()。 ``` df.drop(columns=["mark"]) ``` ![](/media/202307/2023-07-11_102639_8349200.8099327041352564.png) 数据分析师在进行数据处理时经常会遇到长宽表互转的情况,这也是一道常见的数据分析面试题。 melt()方法可以将宽表转长表,即表格型数据转为树形数据。 ``` df.melt(id_vars="姓名", var_name="科目", value_name="成绩") ``` ![](/media/202307/2023-07-11_102726_7969190.5541181456669043.png) pivot()方法可以将长表转宽表,即树形数据转为表格型数据。 ``` df.pivot(index='姓名', columns='科目', values='成绩') ``` ![](/media/202307/2023-07-11_102805_1717700.7512094218023134.png) pivot()其实就是用 set_index()创建层次化索引,再用unstack()重塑 ``` df1.set_index(['姓名','科目']).unstack('科目') ``` ![](/media/202307/2023-07-11_102826_2765600.5932623770950507.png) 数据分组与数据透视表更是一个常见的需求,groupby()方法可以用于数据分组。 ``` df.groupby("科目").mean() ``` ![](/media/202307/2023-07-11_102852_7506620.8502288536702611.png) 由于pivot_table()数据透视表的参数比较多,就不再使用案例来演示了,具体用法可参考下图。 ![](/media/202307/2023-07-11_102921_8775630.2676545617293258.png) ## 数据筛选 如果是筛选行列的话,通常有以下几种方法: 有时我们需要按条件选择部分列、部分行,一般常用的方法有: ![](/media/202307/2023-07-11_102957_6416330.31943967137316853.png) 除此以外,还有很多方法/函数可以用于“数据筛选”。 如果想直接筛选包含特定字符的字符串,可以使用contains()这个方法。 例如,筛选户籍地址列中包含“黑龙江”这个字符的所有行。 ``` df[df["户籍地址"].str.contains("黑龙江")] ``` query()查询方法也可以用来筛选数据,比如查询“语文”成绩大于“数学”成绩的行记录。 ``` df.query("语文 > 英语") ``` ![](/media/202307/2023-07-11_103036_2036090.23360238038949943.png) select_dtypes()方法可用于筛选某些数据类型的变量或列。举例,我们仅选择具有数据类型'int64'的列。 ``` df.select_dtypes("int64") ``` ![](/media/202307/2023-07-11_103108_8421900.8355842805013397.png) isin()接受一个列表,判断该列中元素是否在列表中。 ``` name_list = ["张三", "李四"] df[df["姓名"].isin(name_list)] ``` ![](/media/202307/2023-07-11_103135_6611550.7691154454308514.png) ## 数值数据统计运算 在对数值型的数据进行统计运算时,除了有算术运算、比较预算还有各种常见的汇总统计运行函数, 具体如下表所示。 ![](/media/202307/2023-07-11_103222_2363630.30212773111220204.png) ``` df["语文"].max() ``` 输出: ``` 155 ``` 最后,再说一个比较常用的统计运算函数——累加cumsum()。 ``` df["累计销量"] = df["销量"].cumsum() ``` ![](/media/202307/2023-07-11_103256_2153940.8258528770093836.png) 注:cumprod()方法是指连乘,用于与连加一样,但使用频率较少。
dz
2023年7月11日 10:33
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码