前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Pandas的DataFrame、Series对象的apply方法

基于Pandas的DataFrame、Series对象的apply方法

作者头像
潇洒坤
发布2018-09-10 09:51:53
3.6K0
发布2018-09-10 09:51:53
举报
文章被收录于专栏:简书专栏

这篇文章主要讲解DataFrame、Series对象的apply方法。 豆瓣排名前250电影数据集下载链接: https://pan.baidu.com/s/1M5EuIQEgNfJkGPvqYczb0g 密码: mhcj

1.下载数据集并读入数据

在数据集的同级目录下打开编程环境jupyter notebook 即在同级目录中打开cmd,cmd中输入命令并运行:jupyter notebook 编辑代码文件如下,然后运行:

代码语言:javascript
复制
import pandas as pd
df = pd.read_csv('豆瓣排名前250电影.csv', sep='#')

发现报错:OSError: Initializing from file failed 原因是read_csv方法不接受csv文件使用中文名。 解决方案如下:

代码语言:javascript
复制
import pandas as pd
file = open('豆瓣排名前250电影.csv')
df = pd.read_csv(file, sep='#')

这样的代码能够成功运行,所以pd.read_csv方法的第1个参数可以为字符串或者文件IO流

2.Series对象的str.split方法

代码语言:javascript
复制
area_split_series = df['area'].str.split()
area_split_series.head()

上面一段代码的运行结果如下:

0 [美国] 1 [中国大陆, 中国香港] 2 [法国] 3 [美国] 4 [意大利] Name: area, dtype: object

查看变量的数据类型,如下图所示:

查看变量数据类型.png

上图和代码结合进行理解,Series对象有str.split方法,方法中第一个参数为分隔符,默认为空格。 Series对象的str.split方法的返回值数据类型为Series,Series中的每一个值的数据类型为list。

3.Series对象的apply方法

Series对象的apply方法是Series对象进行映射。 Series对象的map方法也是Series对象进行映射。 下图对比两种方法的不同之处:

2种不同方法对比.png

作者一直以为Series对象的map和apply方法是一样的,实际上是不同的。 所以,Series对象映射为DataFrame对象的时候必须得用apply方法。

Series对象的apply方法是指对其中的每个元素进行映射。 pd.Series方法将变量area_split_series的中list元素转为Series。 Series对象的apply方法和pd.Series方法结合自动实现Series对象转换为DataFrame对象。

代码语言:javascript
复制
area_split_df = area_split_series.apply(pd.Series)
area_split_df.head()

上面一段代码的运行结果如下:

image.png

4.DataFrame对象的apply方法

DataFrame对象的apply方法有非常重要的2个参数。 第1个参数的数据类型是函数对象,是将抽出的行或者列作为Series对象,可以利用Series对象的方法做聚合运算。 第2 个参数为关键字参数axis,数据类型为整型,默认为0。当axis=0时,会将DataFrame中的每一列抽出来做聚合运算,当axis=1时,会将DataFrame中的每一行抽出来做聚合运算。 抽出来的每一行或者每一列的数据类型为Series对象,如下图所示:

image.png

聚合运算包括求最大值,最小值,求和,计数等。 进行最简单的聚合运算:计数,如下图所示:

image.png

上图表示的意思是在第1列中250个值不为空,第2列中87个值不为空,第3列中22个值不为空,第4列中9个值不为空,第5列中2个值不为空。 DataFrame对象的apply方法中的axis关键字参数默认为0。 指定axis=0,运行的效果与不指定axis的值相同,如下图所示:

image.png

指定axis=1,是对每一行做聚合运算,因为有250行,所以只能截图一部分,如下图所示:

image.png

现在要对变量area_split_df做聚合运算,对每一列的值做统计计数,代码如下:

代码语言:javascript
复制
area_count_df = area_split_df.apply(lambda x:x.value_counts())
area_count_df.head()

统计计数.png

5.得出结果

对上一步的DataFrame对象的每一行做求和的聚合运算,就完成本文的最终目标:统计area字段中每个国家出现的次数。

代码语言:javascript
复制
area_count_series = area_count_df.apply(lambda x:x.sum(), axis=1)
area_count_series.head(10)

上面一段代码的运行结果如下图所示:

结果展示.png

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.08.19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.下载数据集并读入数据
  • 2.Series对象的str.split方法
  • 3.Series对象的apply方法
  • 4.DataFrame对象的apply方法
  • 5.得出结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档