Pandas数据处理——盘点那些常用的函数(下)

↘锁芯ラ 提交于 2020-11-09 10:10:23

继上一篇文章Pandas数据处理——盘点那些常用的函数(上)后,这篇文章整理了剩下的一些Pandas常见方法,整体难度会比上一篇文章中的大一点,但还是比较容易理解的。话不多说,直接进入正题。

用于演示的数据如下:

In [11]: dataOut[11]:  company  gender  salary   age0       B  female      30  40.01       A  female      36  31.02       B  female      35  28.03       B  female       9  18.04       B  female      16  43.05       A    male      46  22.06       B  female      15  28.07       B  female      33  40.08       C    male      19  32.0

.astype()

作用对象:SeriesDataFrame

主要用途:修改字段的数据类型,数据量大的情况下可用于减小数据占用的内存,多用于Series

用法:

# 把age字段转为int类型In [12]: data["age"] = data["age"].astype(int)
In [13]: dataOut[13]: company gender salary age0 B female 30 401 A female 36 312 B female 35 283 B female 9 184 B female 16 435 A male 46 226 B female 15 287 B female 33 408 C male 19 32

.rename()

作用对象:Series,DataFrame(大多数情况下)

主要用途:多用于修改DataFrame的列名

主要参数:

  • columns (dict-like or function

    指定要修改的列名以及新的列名,一般以字典形式传入

  • inplace (boolean, default False

    是否作用于原对象

用法:

# 将'age'更改为员工编号'number',并作用于原对象In [15]: data.rename(columns={'age':'number'},inplace=True)
In [16]: dataOut[16]: company gender salary number0 B female 30 401 A female 36 312 B female 35 283 B female 9 184 B female 16 435 A male 46 226 B female 15 287 B female 33 408 C male 19 32

.set_index()

作用对象:DataFrame

主要用途:将DataFrame中的某一(多)个字段设置为索引

用法:

In [19]: data.set_index('number',inplace=True)
In [20]: dataOut[20]: company gender salarynumber40 B female 3031 A female 3628 B female 3518 B female 943 B female 1622 A male 4628 B female 1540 B female 3332 C male 19

.reset_index()

作用对象:Series,DataFrame

主要用途:重置索引,默认重置后的索引为0~len(df)-1

主要参数:

  • drop (boolean, default False

    是否丢弃原索引,具体看下方演示

  • inplace (boolean, default False

    是否作用于原对象

用法:

# drop = True,重置索引,并把原有的索引丢弃In [22]: data.reset_index(drop=True)Out[22]:  company  gender  salary0       B  female      301       A  female      362       B  female      353       B  female       94       B  female      165       A    male      466       B  female      157       B  female      338       C    male      19
# drop = False,重置索引# 原索引列'number'作为新字段进入DataFrameIn [23]: data.reset_index(drop=False,inplace=True)
In [24]: dataOut[24]: number company gender salary0 40 B female 301 31 A female 362 28 B female 353 18 B female 94 43 B female 165 22 A male 466 28 B female 157 40 B female 338 32 C male 19

.drop_duplicates()

作用对象:Series,DataFrame

主要用途:去掉重复值,作用和SQL中的distinct类似

用法:

In [26]: data['company'].drop_duplicates()Out[26]:0    B1    A8    CName: company, dtype: object

.drop()

作用对象:Series,DataFrame

主要用途:常用于删掉DataFrame中的某些字段

主要参数:

  • columns (single label or list-like

    指定要删掉的字段

用法:

# 删掉'gender'列In [27]: data.drop(columns = ['gender'])Out[27]:   number company  salary0      40       B      301      31       A      362      28       B      353      18       B       94      43       B      165      22       A      466      28       B      157      40       B      338      32       C      19

.isin()

作用对象:Series,DataFrame

主要用途:常用于构建布尔索引,对DataFrame的数据进行条件筛选

用法:

# 筛选出A公司和C公司的员工记录In [29]: data.loc[data['company'].isin(['A','C'])]Out[29]:   number company  gender  salary1      31       A  female      365      22       A    male      468      32       C    male      19

pd.cut()

主要用途:将连续变量离散化,比如将人的年龄划分为各个区间

主要参数:

  • x (array-like

    需要进行离散化的一维数据

  • bins (int, sequence of scalars, or IntervalIndex

    设置需要分成的区间,可以指定区间数量,也可以指定间断点

  • labels (array or bool, optional

    设置区间的标签

用法:

# 把薪水分成5个区间In [33]: pd.cut(data.salary,bins = 5)Out[33]:0     (23.8, 31.2]1     (31.2, 38.6]2     (31.2, 38.6]3    (8.963, 16.4]4    (8.963, 16.4]5     (38.6, 46.0]6    (8.963, 16.4]7     (31.2, 38.6]8     (16.4, 23.8]Name: salary, dtype: categoryCategories (5, interval[float64]): [(8.963, 16.4] < (16.4, 23.8] < (23.8, 31.2] < (31.2, 38.6] <(38.6, 46.0]]                                     # 自行指定间断点In [32]: pd.cut(data.salary,bins = [0,10,20,30,40,50])Out[32]:0    (20, 30]1    (30, 40]2    (30, 40]3     (0, 10]4    (10, 20]5    (40, 50]6    (10, 20]7    (30, 40]8    (10, 20]Name: salary, dtype: categoryCategories (5, interval[int64]): [(0, 10] < (10, 20] < (20, 30] < (30, 40] < (40, 50]]
# 指定区间的标签 In [34]: pd.cut(data.salary,bins = [0,10,20,30,40,50],labels = ['低','中下','中','中上','高'])Out[34]:0 中1 中上2 中上3 低4 中下5 高6 中下7 中上8 中下Name: salary, dtype: categoryCategories (5, object): [低 < 中下 < 中 < 中上 < 高]

pd.qcut()

主要用途:将连续变量离散化,区别于pd.cut()用具体数值划分,pd.qcut()使用分位数进行区间划分

主要参数:

  • x (array-like

    需要进行离散化的一维数据

  • q(integer or array of quantiles

    设置需要分成的区间,可以指定区间格式,也可以指定间断点

  • labels (array or boolean, default None

    设置区间的标签

用法:

# 按照0-33.33%,33.33%-66.67%,66.67%-100%百分位进行划分In [35]: pd.qcut(data.salary,q = 3)Out[35]:0    (18.0, 33.667]1    (33.667, 46.0]2    (33.667, 46.0]3     (8.999, 18.0]4     (8.999, 18.0]5    (33.667, 46.0]6     (8.999, 18.0]7    (18.0, 33.667]8    (18.0, 33.667]Name: salary, dtype: categoryCategories (3, interval[float64]): [(8.999, 18.0] < (18.0, 33.667] < (33.667, 46.0]]

.where()

作用对象:Series,DataFrame

主要用途:将不符合条件的值替换掉成指定值,相当于执行了一个if-else

主要参数:

  • cond (boolean Series/DataFrame, array-like, or callable

    用于筛选的条件

  • other(scalar, Series/DataFrame, or callable

    对不符合cond条件的值(结果为为False),用other的值进行替代

用法:

# 语句解析# 若salary<=40,则保持原来的值不变# 若salary大于40,则设置为40In [38]: data['salary'].where(data.salary<=40,40)Out[38]:0    301    362    353     94    165    406    157    338    19Name: salary, dtype: int32

pd.concat()

主要用途:将多个SeriesDataFrame拼起来(横拼或者竖拼都可以)

主要参数:

  • objs (a sequence or mapping of Series or DataFrame objects

    用于拼接的SeriesDataFrame,一般都放在一个列表中传入

  • axis (0/’index’, 1/’columns’

    控制数据是横向拼接还是纵向拼接,默认为纵向拼接。

  • ignore_index (bool, default False

    是否保留原SeiresDataFrame内部的索引,如果为True则对拼接而成的数据生成新索引(0~n-1)

用法:

# 分别取data的前三条和后三条为data1和data2In [41]: data1 = data.head(3)In [42]: data1Out[42]:   number company  gender  salary0      40       B  female      301      31       A  female      362      28       B  female      35
In [43]: data2 = data.tail(3)In [44]: data2Out[44]: number company gender salary6 28 B female 157 40 B female 338 32 C male 19
# 拼接数据In [45]: pd.concat([data1,data2],ignore_index = False)Out[45]: number company gender salary0 40 B female 301 31 A female 362 28 B female 356 28 B female 157 40 B female 338 32 C male 19
# 拼接数据并重置索引In [46]: pd.concat([data1,data2],ignore_index=True)Out[46]: number company gender salary0 40 B female 301 31 A female 362 28 B female 353 28 B female 154 40 B female 335 32 C male 19

.pivot_table()

作用对象:DataFrame

主要用途:对DataFrame进行数据透视,相当于Excel中的数据透视表

主要参数:

  • values (column to aggregate, optional

    用于聚合运算的字段(数据透视的目标变量)

  • index (column, Grouper, array, or list of the previous

    类比于数据透视表中的行标签

  • columns (column, Grouper, array, or list of the previous

    类比于数据透视表中的列标签

  • aggfunc ( function, list of functions, dict, default numpy.mean

    对values进行什么聚合运算

用法:

# 从公司和性别两个维度对薪水进行数据透视# 看看这两个维度下的平均薪资水平In [47]: data.pivot_table(values = 'salary',index = 'company',                          columns = 'gender',aggfunc=np.mean)Out[47]:gender   female  malecompanyA          36.0  46.0B          23.0   NaNC           NaN  19.0

Pandas中常用的函数便整理到这里,至于mapapply这类的就不在此过多介绍了,详细的介绍可以看之前写过的文章。希望整理的这些函数能对大家有所帮助!

精彩回顾






Python网络爬虫与文本数据分析

如何使用Python快速构建领域内情感词典

中文文本数据逻辑性分析库

中文文本分析相关资源汇总

cnsenti中文情绪情感分析库

Python全栈-60天精通之路

Python数据分析相关学习资源汇总帖

漂亮~pandas可以无缝衔接Bokeh

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

2020年B站跨年晚会弹幕内容分析

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

Loughran&McDonald金融文本情感分析库




本文分享自微信公众号 - 大邓和他的Python(DaDengAndHisPython)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!