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

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






python给datafram命名 python datafream_数据集


查看变量数据类型.png


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

3.Series对象的apply方法

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



python给datafram命名 python datafream_数据集_02


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()

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



python给datafram命名 python datafream_开发工具_03


image.png


4.DataFrame对象的apply方法

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



python给datafram命名 python datafream_python_04


image.png


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



python给datafram命名 python datafream_开发工具_05


image.png


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



python给datafram命名 python datafream_python_06


image.png


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



python给datafram命名 python datafream_python_07


image.png


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

area_count_df = area_split_df.apply(lambda x:x.value_counts())
area_count_df.head()


python给datafram命名 python datafream_开发工具_08


统计计数.png


5.得出结果

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

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

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



python给datafram命名 python datafream_数据集_09


结果展示.png