码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-09-11 15:52:21      阅读:28      评论:0      收藏:0      [点我收藏+]

标签:ica   多个   scala   ast   alt   png   常用   python   ble   

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

原创 易执 Python读财 1月20日

点击上方“Python读数”,选择“星标”公众号
重磅干货,第一时间送达

继上一篇文章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()

作用对象:Series和DataFrame
主要用途:修改字段的数据类型,数据量大的情况下可用于减小数据占用的内存,多用于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)
    设置区间的标签
    用法
    # 按照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()

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

  • objs (a sequence or mapping of Series or DataFrame objects)
    用于拼接的Series或DataFrame,一般都放在一个列表中传入
  • axis (0/’index’, 1/’columns’)
    控制数据是横向拼接还是纵向拼接,默认为纵向拼接。
  • ignore_index (bool, default False)
    是否保留原Seires或DataFrame内部的索引,如果为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中常用的函数便整理到这里,至于map和apply这类的就不在此过多介绍了,详细的介绍可以看之前写过的文章。希望整理的这些函数能对大家有所帮助!

往期精彩回顾

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

Pandas数据处理——一文详解数据拼接方法merge

Pandas数据分析——超好用的Groupby详解

Pandas数据处理三板斧,你会几板?

一文带你掌握常见的Pandas性能优化方法,让你的pandas飞起来!
技术图片

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

标签:ica   多个   scala   ast   alt   png   常用   python   ble   

原文地址:https://blog.51cto.com/14915204/2525827

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!