Python库Pandas《Pandas Cookbook》第02章 DataFrame运算

这是书籍《Pandas Cookbook》书籍第02章的代码复现,所有代码运行在Jupyter Notebook上,原讲解地址是:
https://www.jianshu.com/p/13dcecdacd7c
我上传代码的github地址是:
https://github.com/Asunqingwen/PandasCookbook.git
github上有该书中用到的data,里面代码会不定期更新(因为工作原因,时间不定),直到本书学习完成!
相比原讲解,会穿插一些自己的理解,水平有限,请各路大神指正。

1.选取多个DataFrame列

在第01章中讲过,DataFrame数据结构的一列就是一个Series,所以选择多列的方式和第01章中选取Series类似,当我们选取的列数大于1时,[]中的key必须是一个由列名组成的列表,不然会出错

movie = pd.read_csv('data/movie.csv')
movie_actor_director = movie[['actor_1_name','actor_2_name','actor_3_name','director_name']]
movie_actor_director.head()

在这里插入图片描述

#错误选取多列的方式
movie['actor_1_name','actor_2_name','actor_3_name',"director_name"]

在这里插入图片描述

如果仅仅只选择一列,[]中的key可以是列名组成的单列表,也可以是直接的列名,但是要注意这两种方式的返回结果是一样的,但是数据类型不一样——从下图可以看出,以列表作为key,返回的还是一个DataFrame;以列名直接作为key,返回的则是一个Series
在这里插入图片描述

DataFrame除了可以用列名组成的list进行列选取,还可以用基于类型的select_dtypes()和基于模式匹配的filter()

#使用select_dtypes(),选取整数列
movie.select_dtypes(include=['int64']).head()

#选取所有的数值列
movie.select_dtypes(include=['number']).head()

#通过filter()函数过滤选取多列
movie.filter(like='facebook').head()

#通过正则表达式选取多列
movie.filter(regex='\d').head()

#filter()函数,传递列表到参数items,选取多列
movie.filter(items=['actor_1_name','asdf']).head()

在这里插入图片描述
在这里插入图片描述

2.对列名进行排序

将DataFrame数据输出的列名顺序进行重排

#打印列索引
movie.columns

#将列索引按照指定的顺序排列
disc_core = ['movie_title','title_year','content_rating','genres']
disc_people = ['director_name','actor_1_name','actor_2_name','actor_3_name']
disc_other = ['color','country','language','plot_keywords','movie_imdb_link']

cont_fb = ['director_facebook_likes','actor_1_facebook_likes','actor_2_facebook_likes',
            'actor_3_facebook_likes', 'cast_total_facebook_likes', 'movie_facebook_likes']
cont_finance = ['budget','gross']
cont_num_reviews = ['num_voted_users','num_user_for_reviews', 'num_critic_for_reviews']
cont_other = ['imdb_score','duration', 'aspect_ratio', 'facenumber_in_poster']

new_col_order = disc_core + disc_people + disc_other + \
                cont_fb + cont_finance + cont_num_reviews + cont_other
 #检验列名顺序重定义后,是否有重复的
set(movie.columns) == set(new_col_order)

movie2 = movie[new_col_order]
movie2.head()

在这里插入图片描述

3.在整个DataFrame上操作

类似于第01章Series的操作,主要是求取基本的统计特征min,max,medium,std,percentiles等
在这里插入图片描述

pandas中的sum默认是以列为单位,求取一列的和;调用基本统计特征时,有个skipna参数,这个参数默认值是True,即忽略缺失值;如果设置为False,则不忽略缺失值,即有缺失值的列不会进行相应特征计算,用NaN显示,下图的RuntimeWarning也是因为Nan的原因
在这里插入图片描述

4.串联DataFrame方法

类似于第01章的Series操作,主要是对缺失值的处理
在这里插入图片描述

5.在DataFrame上使用运算符

类似于第01章的Series,用数学符号或对应的函数进行基本数学运算,进行运算的数据必须是同类型的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.比较缺失值

pandas和numpy一样都用NaN对象来表示缺失值,这是一个不等于自身的特殊对象,只有运算符——不等于NaN,才会使得比较结果返回True
在这里插入图片描述

比较两个DataFrame,就用assert_frame_equal()函数,但是这个函数返回的是None,所以需要用try-except来判定比较的连个DataFrame是否相等
在这里插入图片描述

7.矩阵转置

个人感觉,这一部分好像和矩阵的转置没啥关系,主要是两个函数cumsum和sort_values——cumsum是个累加函数,参数axis指定累加的方向,比如axis=1,则是行方向累加,第一列不动,逐列累加到后面的列;sort_values则是一个排序函数,也有个参数axis用来指定排序的方向,但是它第一个参数是by,必须指定为和axis对应的列名或者行名,才能对该列名或行名后的所以列或行进行相应的排序
在这里插入图片描述

8.确定大学校园多样性

note:这次导入了两份数据,注意区别上面导入的数据哦
在这里插入图片描述

这一段主要是通过pandas的一些基本数据处理方式,获取大学人口种类分布的多样性,首先是数据清洗,去除缺失值
在这里插入图片描述

给定一个阈值,每个种族的人口比例大于0.15,计算出每个学校人口比例大于0.15的种族有多少个,最后对种类数进行降序排列,输出前5个
在这里插入图片描述

用loc函数查看最具有人口多样性的两个大学的人口具体分布情况,同时查看了US News公布的前五所大学在我们所计算的多样性结果中的情况
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值