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

简介: pandas是python中的数据分析库,DataFrame、Series是pandas库中2种主要对象。这篇文章主要讲解DataFrame、Series对象的apply方法。

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

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

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

import pandas as pd
df = pd.read_csv('豆瓣排名前250电影.csv', sep='#')

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

import pandas as pd
file = open('豆瓣排名前250电影.csv')
df = pd.read_csv(file, sep='#')

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

2.Series对象的str.split方法

area_split_series = df['area'].str.split()
area_split_series.head()

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

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

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


img_29ace2277ce1def068e9bef1316eb85b.png
查看变量数据类型.png

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

3.Series对象的apply方法

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


img_5fe8103588ff95f0299d4017979b439a.png
2种不同方法对比.png

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

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

area_split_df = area_split_series.apply(pd.Series)
area_split_df.head()

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


img_d3545abaa58e1473c27b98db65dfd349.png
image.png

4.DataFrame对象的apply方法

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


img_49402a053cb8f5dda07bac4e780313f0.png
image.png

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


img_637b4d7be2cb780a3ccfa455e8edd428.png
image.png

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


img_090da929aba3c966427f0a4460d4102c.png
image.png

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


img_f3982a1aa86162c01bde4ede78b9a6e0.png
image.png

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

area_count_df = area_split_df.apply(lambda x:x.value_counts())
area_count_df.head()
img_fb9615648afd11b6c4daebc9ff2e791f.png
统计计数.png

5.得出结果

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

area_count_series = area_count_df.apply(lambda x:x.sum(), axis=1)
area_count_series.head(10)

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


img_1611f37b14742fd9b77bbf8408028439.png
结果展示.png
目录
相关文章
|
2月前
|
SQL 索引 Python
Pandas中DataFrame合并的几种方法
Pandas中DataFrame合并的几种方法
192 0
|
18天前
|
SQL 数据采集 数据可视化
Pandas 数据结构 - DataFrame
10月更文挑战第26天
36 2
Pandas 数据结构 - DataFrame
|
18天前
|
索引 Python
Pandas 数据结构 - Series
10月更文挑战第26天
31 2
Pandas 数据结构 - Series
|
19天前
|
Python
通过Pandas库处理股票收盘价数据,识别最近一次死叉后未出现金叉的具体位置的方法
在金融分析领域,"死叉"指的是短期移动平均线(如MA5)下穿长期移动平均线(如MA10),而"金叉"则相反。本文介绍了一种利用Python编程语言,通过Pandas库处理股票收盘价数据,识别最近一次死叉后未出现金叉的具体位置的方法。该方法首先计算两种移动平均线,接着确定它们的交叉点,最后检查并输出最近一次死叉及其后是否形成了金叉。此技术广泛应用于股市趋势分析。
37 2
|
1月前
|
存储 数据采集 数据处理
Pandas中批量转换object至float的高效方法
在数据分析中,常需将Pandas DataFrame中的object类型列转换为float类型以进行数值计算。本文介绍如何使用`pd.to_numeric`函数高效转换,并处理非数字值,包括用0或平均值填充NaN值的方法。
47 1
|
2月前
|
数据处理 Python
Pandas中的drop_duplicates()方法详解
Pandas中的drop_duplicates()方法详解
178 2
|
2月前
|
数据处理 Python
Pandas快速统计重复值的2种方法
Pandas快速统计重复值的2种方法
103 1
|
2月前
|
数据挖掘 Python
掌握Pandas中的相关性分析:corr()方法详解
掌握Pandas中的相关性分析:corr()方法详解
175 0
|
2月前
|
数据处理 索引 Python
Pandas中resample方法:轻松处理时间序列数据
Pandas中resample方法:轻松处理时间序列数据
70 0
|
20天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
51 0

热门文章

最新文章

下一篇
无影云桌面