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


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

    用于演示的数据如下:

    In [11]: data
    Out[11]:
      company  gender  salary   age
    0       B  female      30  40.0
    1       A  female      36  31.0
    2       B  female      35  28.0
    3       B  female       9  18.0
    4       B  female      16  43.0
    5       A    male      46  22.0
    6       B  female      15  28.0
    7       B  female      33  40.0
    8       C    male      19  32.0

    .astype()

    作用对象:SeriesDataFrame

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

    用法:

    # 把age字段转为int类型
    In [12]: data["age"] = data["age"].astype(int)
    In [13]: data
    Out[13]:
      company  gender  salary  age
    0       B  female      30   40
    1       A  female      36   31
    2       B  female      35   28
    3       B  female       9   18
    4       B  female      16   43
    5       A    male      46   22
    6       B  female      15   28
    7       B  female      33   40
    8       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]: data
    Out[16]:
      company  gender  salary  number
    0       B  female      30      40
    1       A  female      36      31
    2       B  female      35      28
    3       B  female       9      18
    4       B  female      16      43
    5       A    male      46      22
    6       B  female      15      28
    7       B  female      33      40
    8       C    male      19      32

    .set_index()

    作用对象:DataFrame

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

    用法:

    In [19]: data.set_index('number',inplace=True)
    In [20]: data
    Out[20]:
           company  gender  salary
    number
    40           B  female      30
    31           A  female      36
    28           B  female      35
    18           B  female       9
    43           B  female      16
    22           A    male      46
    28           B  female      15
    40           B  female      33
    32           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  salary
    0       B  female      30
    1       A  female      36
    2       B  female      35
    3       B  female       9
    4       B  female      16
    5       A    male      46
    6       B  female      15
    7       B  female      33
    8       C    male      19
    # drop = False,重置索引
    # 原索引列'number'作为新字段进入DataFrame
    In [23]: data.reset_index(drop=False,inplace=True)
    In [24]: data
    Out[24]:
       number company  gender  salary
    0      40       B  female      30
    1      31       A  female      36
    2      28       B  female      35
    3      18       B  female       9
    4      43       B  female      16
    5      22       A    male      46
    6      28       B  female      15
    7      40       B  female      33
    8      32       C    male      19

    .drop_duplicates()

    作用对象:Series,DataFrame

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

    用法:

    In [26]: data['company'].drop_duplicates()
    Out[26]:
    0    B
    1    A
    8    C
    Name: company, dtype: object

    .drop()

    作用对象:Series,DataFrame

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

    主要参数:

    • columns (single label or list-like
      指定要删掉的字段

    用法:

    # 删掉'gender'列
    In [27]: data.drop(columns = ['gender'])
    Out[27]:
       number company  salary
    0      40       B      30
    1      31       A      36
    2      28       B      35
    3      18       B       9
    4      43       B      16
    5      22       A      46
    6      28       B      15
    7      40       B      33
    8      32       C      19

    .isin()

    作用对象:Series,DataFrame

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

    用法:

    # 筛选出A公司和C公司的员工记录
    In [29]: data.loc[data['company'].isin(['A','C'])]
    Out[29]:
       number company  gender  salary
    1      31       A  female      36
    5      22       A    male      46
    8      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: category
    Categories (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: category
    Categories (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: category
    Categories (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: category
    Categories (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,则设置为40
    In [38]: data['salary'].where(data.salary<=40,40)
    Out[38]:
    0    30
    1    36
    2    35
    3     9
    4    16
    5    40
    6    15
    7    33
    8    19
    Name: 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和data2
    In [41]: data1 = data.head(3)
    In [42]: data1
    Out[42]:
       number company  gender  salary
    0      40       B  female      30
    1      31       A  female      36
    2      28       B  female      35
    
    In [43]: data2 = data.tail(3)
    In [44]: data2
    Out[44]:
       number company  gender  salary
    6      28       B  female      15
    7      40       B  female      33
    8      32       C    male      19
    
    # 拼接数据
    In [45]: pd.concat([data1,data2],ignore_index = False)
    Out[45]:
       number company  gender  salary
    0      40       B  female      30
    1      31       A  female      36
    2      28       B  female      35
    6      28       B  female      15
    7      40       B  female      33
    8      32       C    male      19
    
    # 拼接数据并重置索引
    In [46]: pd.concat([data1,data2],ignore_index=True)
    Out[46]:
       number company  gender  salary
    0      40       B  female      30
    1      31       A  female      36
    2      28       B  female      35
    3      28       B  female      15
    4      40       B  female      33
    5      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  male
    company
    A          36.0  46.0
    B          23.0   NaN
    C           NaN  19.0

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

    相关文章:

    1. Pandas数据处理三板斧——map、apply、applymap详解
    2. Pandas数据分析——超好用的Groupby详解
    3. Pandas数据处理——玩转时间序列数据
    4. Pandas数据分析——Merge数据拼接图文详解
    5. Pandas数据处理——盘点那些常用的函数(上)
    6. 天秀!Pandas还能用来写爬虫?
    7. 提高数据的颜值!一起看看Pandas中的那些Style
    8. 提速百倍的Pandas性能优化方法,让你的Pandas飞起来!

     转自https://zhuanlan.zhihu.com/p/106724730

  • 相关阅读:
    20191117-STD::讲解及求平均数例题
    计算机网络-ip分类
    游标cursor
    ajax
    django ORM
    urls
    templates
    views
    models
    setting
  • 原文地址:https://www.cnblogs.com/cangqinglang/p/15140830.html
Copyright © 2020-2023  润新知