3.Pandas
3.3 Pandas进阶
1 2
| import pandas as pd import numpy as np
|
3.3.1 数据重塑和轴向旋转
(1)层次化索引
层次化索引是pandas的一项重要功能,他能使我们再一个轴上拥有多个索引
Series的层次化索引
1 2
| s=pd.Series(np.arange(1,10),index=[['a','a','a','b','b','c','c','d','d'],[1,2,3,1,2,3,1,2,3]]) s
|
a 1 1
2 2
3 3
b 1 4
2 5
c 3 6
1 7
d 2 8
3 9
dtype: int32
MultiIndex([('a', 1),
('a', 2),
('a', 3),
('b', 1),
('b', 2),
('c', 3),
('c', 1),
('d', 2),
('d', 3)],
)
a 1 1
2 2
3 3
b 1 4
2 5
dtype: int32
a 1
b 4
c 7
dtype: int32
通过unstack方法可以将Series变成一个DataFrame
|
1 |
2 |
3 |
a |
1.0 |
2.0 |
3.0 |
b |
4.0 |
5.0 |
NaN |
c |
7.0 |
NaN |
6.0 |
d |
NaN |
8.0 |
9.0 |
a 1 1.0
2 2.0
3 3.0
b 1 4.0
2 5.0
c 1 7.0
3 6.0
d 2 8.0
3 9.0
dtype: float64
DataFrame的层次化索引
对于DataFrame来说,行和列都能够进行层次化索引。
1 2
| data=pd.DataFrame(np.arange(12).reshape(4,3)) data
|
|
0 |
1 |
2 |
0 |
0 |
1 |
2 |
1 |
3 |
4 |
5 |
2 |
6 |
7 |
8 |
3 |
9 |
10 |
11 |
1 2
| data=pd.DataFrame(np.arange(12).reshape(4,3),index=[['a','a','b','b'],[1,2,1,2]]) data
|
|
|
0 |
1 |
2 |
a |
1 |
0 |
1 |
2 |
2 |
3 |
4 |
5 |
b |
1 |
6 |
7 |
8 |
2 |
9 |
10 |
11 |
1 2
| data=pd.DataFrame(np.arange(12).reshape(4,3),index=[['a','a','b','b'],[1,2,1,2]],columns=[['A','A','B'],['Z','X','C']]) data
|
|
|
A |
B |
|
|
Z |
X |
C |
a |
1 |
0 |
1 |
2 |
2 |
3 |
4 |
5 |
b |
1 |
6 |
7 |
8 |
2 |
9 |
10 |
11 |
选取列
|
|
Z |
X |
a |
1 |
0 |
1 |
2 |
3 |
4 |
b |
1 |
6 |
7 |
2 |
9 |
10 |
设置名称
1 2
| data.index.names=['row1','row2'] data
|
|
|
A |
B |
|
|
Z |
X |
C |
row1 |
row2 |
|
|
|
a |
1 |
0 |
1 |
2 |
2 |
3 |
4 |
5 |
b |
1 |
6 |
7 |
8 |
2 |
9 |
10 |
11 |
1 2
| data.columns.names=['column1','column2'] data
|
|
column1 |
A |
B |
|
column2 |
Z |
X |
C |
row1 |
row2 |
|
|
|
a |
1 |
0 |
1 |
2 |
2 |
3 |
4 |
5 |
b |
1 |
6 |
7 |
8 |
2 |
9 |
10 |
11 |
行顺序调整
1
| data.swaplevel('row1','row2')
|
|
column1 |
A |
B |
|
column2 |
Z |
X |
C |
row2 |
row1 |
|
|
|
1 |
a |
0 |
1 |
2 |
2 |
a |
3 |
4 |
5 |
1 |
b |
6 |
7 |
8 |
2 |
b |
9 |
10 |
11 |
层次化——电影数据示列
数据导入
1 2
| df=pd.read_excel('movie_data2.xlsx') df.head()
|
|
Unnamed: 0 |
名字 |
投票人数 |
类型 |
产地 |
上映时间 |
时长 |
年代 |
评分 |
首映地点 |
0 |
0 |
肖申克的救赎 |
692795 |
剧情/犯罪 |
美国 |
1994-09-10 00:00:00 |
142 |
1994 |
9.6 |
多伦多电影节 |
1 |
1 |
控方证人 |
42995 |
剧情/悬疑/犯罪 |
美国 |
1957-12-17 00:00:00 |
116 |
1957 |
9.5 |
美国 |
2 |
2 |
美丽人生 |
327855 |
剧情/喜剧/爱情 |
意大利 |
1997-12-20 00:00:00 |
116 |
1997 |
9.5 |
意大利 |
3 |
3 |
阿甘正传 |
580897 |
剧情/爱情 |
美国 |
1994-06-23 00:00:00 |
142 |
1994 |
9.4 |
洛杉矶首映 |
4 |
4 |
霸王别姬 |
478523 |
剧情/爱情/同性 |
中国大陆 |
1993-01-01 00:00:00 |
171 |
1993 |
9.4 |
香港 |
RangeIndex(start=0, stop=38730, step=1)
set_index:可以把列变成索引
reset_index:把索引变成列
把产地和年代同时设置成索引,产地是外层索引,年代是内层索引
1 2
| df=df.set_index(['产地','年代']) df.head()
|
|
|
Unnamed: 0 |
名字 |
投票人数 |
类型 |
上映时间 |
时长 |
评分 |
首映地点 |
产地 |
年代 |
|
|
|
|
|
|
|
|
美国 |
1994 |
0 |
肖申克的救赎 |
692795 |
剧情/犯罪 |
1994-09-10 00:00:00 |
142 |
9.6 |
多伦多电影节 |
1957 |
1 |
控方证人 |
42995 |
剧情/悬疑/犯罪 |
1957-12-17 00:00:00 |
116 |
9.5 |
美国 |
意大利 |
1997 |
2 |
美丽人生 |
327855 |
剧情/喜剧/爱情 |
1997-12-20 00:00:00 |
116 |
9.5 |
意大利 |
美国 |
1994 |
3 |
阿甘正传 |
580897 |
剧情/爱情 |
1994-06-23 00:00:00 |
142 |
9.4 |
洛杉矶首映 |
中国大陆 |
1993 |
4 |
霸王别姬 |
478523 |
剧情/爱情/同性 |
1993-01-01 00:00:00 |
171 |
9.4 |
香港 |
每一个索引都是一个元组
('美国', 1994)
获取所有的美国电影,由于产地信息已经变成了索引,因此可以用loc方法
|
Unnamed: 0 |
名字 |
投票人数 |
类型 |
上映时间 |
时长 |
评分 |
首映地点 |
年代 |
|
|
|
|
|
|
|
|
1994 |
0 |
肖申克的救赎 |
692795 |
剧情/犯罪 |
1994-09-10 00:00:00 |
142 |
9.6 |
多伦多电影节 |
1957 |
1 |
控方证人 |
42995 |
剧情/悬疑/犯罪 |
1957-12-17 00:00:00 |
116 |
9.5 |
美国 |
1994 |
3 |
阿甘正传 |
580897 |
剧情/爱情 |
1994-06-23 00:00:00 |
142 |
9.4 |
洛杉矶首映 |
2012 |
5 |
泰坦尼克号 |
157074 |
剧情/爱情/灾难 |
2012-04-10 00:00:00 |
194 |
9.4 |
中国大陆 |
1993 |
6 |
辛德勒的名单 |
306904 |
剧情/历史/战争 |
1993-11-30 00:00:00 |
195 |
9.4 |
华盛顿首映 |
这样做最大的好处就是我们可以简化很多的筛选环节
索引交换 swaplevel
1 2
| df=df.swaplevel('产地','年代') df.head()
|
|
|
Unnamed: 0 |
名字 |
投票人数 |
类型 |
上映时间 |
时长 |
评分 |
首映地点 |
年代 |
产地 |
|
|
|
|
|
|
|
|
1994 |
美国 |
0 |
肖申克的救赎 |
692795 |
剧情/犯罪 |
1994-09-10 00:00:00 |
142 |
9.6 |
多伦多电影节 |
1957 |
美国 |
1 |
控方证人 |
42995 |
剧情/悬疑/犯罪 |
1957-12-17 00:00:00 |
116 |
9.5 |
美国 |
1997 |
意大利 |
2 |
美丽人生 |
327855 |
剧情/喜剧/爱情 |
1997-12-20 00:00:00 |
116 |
9.5 |
意大利 |
1994 |
美国 |
3 |
阿甘正传 |
580897 |
剧情/爱情 |
1994-06-23 00:00:00 |
142 |
9.4 |
洛杉矶首映 |
1993 |
中国大陆 |
4 |
霸王别姬 |
478523 |
剧情/爱情/同性 |
1993-01-01 00:00:00 |
171 |
9.4 |
香港 |
取消层次化索引
|
年代 |
产地 |
Unnamed: 0 |
名字 |
投票人数 |
类型 |
上映时间 |
时长 |
评分 |
首映地点 |
0 |
1994 |
美国 |
0 |
肖申克的救赎 |
692795 |
剧情/犯罪 |
1994-09-10 00:00:00 |
142 |
9.6 |
多伦多电影节 |
1 |
1957 |
美国 |
1 |
控方证人 |
42995 |
剧情/悬疑/犯罪 |
1957-12-17 00:00:00 |
116 |
9.5 |
美国 |
2 |
1997 |
意大利 |
2 |
美丽人生 |
327855 |
剧情/喜剧/爱情 |
1997-12-20 00:00:00 |
116 |
9.5 |
意大利 |
3 |
1994 |
美国 |
3 |
阿甘正传 |
580897 |
剧情/爱情 |
1994-06-23 00:00:00 |
142 |
9.4 |
洛杉矶首映 |
4 |
1993 |
中国大陆 |
4 |
霸王别姬 |
478523 |
剧情/爱情/同性 |
1993-01-01 00:00:00 |
171 |
9.4 |
香港 |
(2)数据旋转
行列转化
|
年代 |
产地 |
Unnamed: 0 |
名字 |
投票人数 |
类型 |
上映时间 |
时长 |
评分 |
首映地点 |
0 |
1994 |
美国 |
0 |
肖申克的救赎 |
692795 |
剧情/犯罪 |
1994-09-10 00:00:00 |
142 |
9.6 |
多伦多电影节 |
1 |
1957 |
美国 |
1 |
控方证人 |
42995 |
剧情/悬疑/犯罪 |
1957-12-17 00:00:00 |
116 |
9.5 |
美国 |
2 |
1997 |
意大利 |
2 |
美丽人生 |
327855 |
剧情/喜剧/爱情 |
1997-12-20 00:00:00 |
116 |
9.5 |
意大利 |
3 |
1994 |
美国 |
3 |
阿甘正传 |
580897 |
剧情/爱情 |
1994-06-23 00:00:00 |
142 |
9.4 |
洛杉矶首映 |
4 |
1993 |
中国大陆 |
4 |
霸王别姬 |
478523 |
剧情/爱情/同性 |
1993-01-01 00:00:00 |
171 |
9.4 |
香港 |
T 可以直接让数据的行和列进行交换
|
0 |
1 |
2 |
3 |
4 |
年代 |
1994 |
1957 |
1997 |
1994 |
1993 |
产地 |
美国 |
美国 |
意大利 |
美国 |
中国大陆 |
Unnamed: 0 |
0 |
1 |
2 |
3 |
4 |
名字 |
肖申克的救赎 |
控方证人 |
美丽人生 |
阿甘正传 |
霸王别姬 |
投票人数 |
692795 |
42995 |
327855 |
580897 |
478523 |
类型 |
剧情/犯罪 |
剧情/悬疑/犯罪 |
剧情/喜剧/爱情 |
剧情/爱情 |
剧情/爱情/同性 |
上映时间 |
1994-09-10 00:00:00 |
1957-12-17 00:00:00 |
1997-12-20 00:00:00 |
1994-06-23 00:00:00 |
1993-01-01 00:00:00 |
时长 |
142 |
116 |
116 |
142 |
171 |
评分 |
9.6 |
9.5 |
9.5 |
9.4 |
9.4 |
首映地点 |
多伦多电影节 |
美国 |
意大利 |
洛杉矶首映 |
香港 |
dataframe也可以使用stack和unstack,转化为层次索引的Series
0 年代 1994
产地 美国
Unnamed: 0 0
名字 肖申克的救赎
投票人数 692795
类型 剧情/犯罪
上映时间 1994-09-10 00:00:00
时长 142
评分 9.6
首映地点 多伦多电影节
1 年代 1957
产地 美国
Unnamed: 0 1
名字 控方证人
投票人数 42995
类型 剧情/悬疑/犯罪
上映时间 1957-12-17 00:00:00
时长 116
评分 9.5
首映地点 美国
2 年代 1997
产地 意大利
Unnamed: 0 2
名字 美丽人生
投票人数 327855
类型 剧情/喜剧/爱情
上映时间 1997-12-20 00:00:00
时长 116
评分 9.5
首映地点 意大利
3 年代 1994
产地 美国
Unnamed: 0 3
名字 阿甘正传
投票人数 580897
类型 剧情/爱情
上映时间 1994-06-23 00:00:00
时长 142
评分 9.4
首映地点 洛杉矶首映
4 年代 1993
产地 中国大陆
Unnamed: 0 4
名字 霸王别姬
投票人数 478523
类型 剧情/爱情/同性
上映时间 1993-01-01 00:00:00
时长 171
评分 9.4
首映地点 香港
dtype: object
|
年代 |
产地 |
Unnamed: 0 |
名字 |
投票人数 |
类型 |
上映时间 |
时长 |
评分 |
首映地点 |
0 |
1994 |
美国 |
0 |
肖申克的救赎 |
692795 |
剧情/犯罪 |
1994-09-10 |
142 |
9.6 |
多伦多电影节 |
1 |
1957 |
美国 |
1 |
控方证人 |
42995 |
剧情/悬疑/犯罪 |
1957-12-17 |
116 |
9.5 |
美国 |
2 |
1997 |
意大利 |
2 |
美丽人生 |
327855 |
剧情/喜剧/爱情 |
1997-12-20 |
116 |
9.5 |
意大利 |
3 |
1994 |
美国 |
3 |
阿甘正传 |
580897 |
剧情/爱情 |
1994-06-23 |
142 |
9.4 |
洛杉矶首映 |
4 |
1993 |
中国大陆 |
4 |
霸王别姬 |
478523 |
剧情/爱情/同性 |
1993-01-01 |
171 |
9.4 |
香港 |
3.3.2 数据分组、分组运算
GroupBy技术:实现数据的分组,和分组运算,作用类似于数据透视表
按照电影产地进行分组
先定义一个分组变量group
1
| group=df.groupby(df['产地'])
|
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002238D9028B0>
可以计算分组后的各个统计量
|
年代 |
Unnamed: 0 |
投票人数 |
时长 |
评分 |
产地 |
|
|
|
|
|
中国台湾 |
1999.009709 |
19350.590615 |
8474.864078 |
87.257282 |
7.066667 |
中国大陆 |
2004.599684 |
20391.791426 |
10898.293793 |
81.432930 |
6.064703 |
中国香港 |
1991.100316 |
19230.117152 |
8167.446159 |
88.541214 |
6.474114 |
丹麦 |
1999.090909 |
20415.611111 |
1993.858586 |
88.101010 |
7.245960 |
俄罗斯 |
1992.534129 |
20061.753479 |
2098.813784 |
93.280981 |
7.310736 |
计算每年的平均评分
1
| df['评分'].groupby(df['年代']).mean().head()
|
年代
1888 7.950000
1890 4.800000
1892 7.500000
1894 6.633333
1895 7.575000
Name: 评分, dtype: float64
只会对数值变量进行分组运算
1
| df['年代']=df['年代'].astype('str')
|
1
| df.groupby(df['产地']).mean().head()
|
|
Unnamed: 0 |
投票人数 |
时长 |
评分 |
产地 |
|
|
|
|
中国台湾 |
19350.590615 |
8474.864078 |
87.257282 |
7.066667 |
中国大陆 |
20391.791426 |
10898.293793 |
81.432930 |
6.064703 |
中国香港 |
19230.117152 |
8167.446159 |
88.541214 |
6.474114 |
丹麦 |
20415.611111 |
1993.858586 |
88.101010 |
7.245960 |
俄罗斯 |
20061.753479 |
2098.813784 |
93.280981 |
7.310736 |
我们也可以传入多个分组变量
1
| df.groupby([df['产地'],df['年代']]).mean().head()
|
|
|
Unnamed: 0 |
投票人数 |
时长 |
评分 |
产地 |
年代 |
|
|
|
|
中国台湾 |
1963 |
14805.0 |
121.000000 |
113.0 |
6.4 |
1965 |
30282.0 |
153.666667 |
105.0 |
6.8 |
1966 |
26305.0 |
51.000000 |
60.0 |
7.9 |
1967 |
16605.0 |
4444.000000 |
112.0 |
8.0 |
1968 |
21282.5 |
89.000000 |
83.0 |
7.4 |
获得每个地区,每一年的电影的评分的均值
1
| df['评分'].groupby([df['产地'],df['年代']]).mean()
|
产地 年代
中国台湾 1963 6.400000
1965 6.800000
1966 7.900000
1967 8.000000
1968 7.400000
...
韩国 2012 6.064151
2013 6.098198
2014 5.650833
2015 5.423853
2016 5.730000
Name: 评分, Length: 1511, dtype: float64
Series通过unstack方法转化为dataframe——会产生缺失值
1
| df['评分'].groupby([df['产地'],df['年代']]).mean().unstack().head()
|
年代 |
1888 |
1890 |
1892 |
1894 |
1895 |
1896 |
1897 |
1898 |
1899 |
1900 |
... |
2008 |
2009 |
2010 |
2011 |
2012 |
2013 |
2014 |
2015 |
2016 |
2017 |
产地 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
中国台湾 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
... |
7.420000 |
7.100000 |
7.053846 |
7.231818 |
6.556098 |
7.076471 |
6.522222 |
6.576000 |
NaN |
NaN |
中国大陆 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
... |
6.589726 |
6.536628 |
6.357831 |
5.824606 |
5.727187 |
5.316667 |
4.963757 |
4.969189 |
4.712000 |
NaN |
中国香港 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
... |
6.476786 |
6.442553 |
6.245455 |
5.971053 |
6.110526 |
6.105714 |
5.616667 |
5.589189 |
5.390909 |
NaN |
丹麦 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
... |
7.050000 |
7.118182 |
7.362500 |
7.016667 |
7.418750 |
6.555556 |
7.120000 |
7.166667 |
7.000000 |
NaN |
俄罗斯 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
... |
7.024468 |
6.922727 |
6.974324 |
7.006000 |
6.784127 |
6.890566 |
6.965957 |
7.089655 |
NaN |
NaN |
5 rows × 127 columns
3.3.3 离散化处理
再实际的数据分析项目中,对有的数据属性,我们往往并不关注数据的绝对取值,只关注它所处的区间或等级。
比如我们可以把评分9分及以上定义为A,7-9分为B,5-7分为C,3-5分为D,小于3分的为E。
离散化也可以称为分组、区间化
Pandas为我们提供了方便的函数cut():
pd.cut (x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)
参数:
x:需要离散化的数组、Series、DataFrame对象
bins:分组的依据
right=True:默认包括右端点
include_lowest=False:默认不包括左端点
labels:是否要用标记替换分组
retbins:返回x中对应的bins的列表
precision:精度
1 2
| df['评分等级']=pd.cut(df['评分'],[0,3,5,7,9,10],labels=['E','D','C','B','A']) df
|
|
年代 |
产地 |
Unnamed: 0 |
名字 |
投票人数 |
类型 |
上映时间 |
时长 |
评分 |
首映地点 |
评分等级 |
0 |
1994 |
美国 |
0 |
肖申克的救赎 |
692795 |
剧情/犯罪 |
1994-09-10 00:00:00 |
142 |
9.600000 |
多伦多电影节 |
A |
1 |
1957 |
美国 |
1 |
控方证人 |
42995 |
剧情/悬疑/犯罪 |
1957-12-17 00:00:00 |
116 |
9.500000 |
美国 |
A |
2 |
1997 |
意大利 |
2 |
美丽人生 |
327855 |
剧情/喜剧/爱情 |
1997-12-20 00:00:00 |
116 |
9.500000 |
意大利 |
A |
3 |
1994 |
美国 |
3 |
阿甘正传 |
580897 |
剧情/爱情 |
1994-06-23 00:00:00 |
142 |
9.400000 |
洛杉矶首映 |
A |
4 |
1993 |
中国大陆 |
4 |
霸王别姬 |
478523 |
剧情/爱情/同性 |
1993-01-01 00:00:00 |
171 |
9.400000 |
香港 |
A |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
38725 |
1935 |
美国 |
38728 |
1935年 |
57 |
喜剧/歌舞 |
1935-03-15 00:00:00 |
98 |
7.600000 |
美国 |
B |
38726 |
1986 |
中国大陆 |
38729 |
血溅画屏 |
95 |
剧情/悬疑/犯罪/武侠/古装 |
1905-06-08 00:00:00 |
91 |
7.100000 |
美国 |
B |
38727 |
1986 |
中国大陆 |
38730 |
魔窟中的幻想 |
51 |
惊悚/恐怖/儿童 |
1905-06-08 00:00:00 |
78 |
8.000000 |
美国 |
B |
38728 |
1977 |
俄罗斯 |
38731 |
列宁格勒围困之星火战役 Блокада: Фильм 2: Ленинградский ме... |
32 |
剧情/战争 |
1905-05-30 00:00:00 |
97 |
6.600000 |
美国 |
C |
38729 |
2017 |
美国 |
38732 |
复仇者联盟3 |
123456 |
剧情/科幻 |
2017-05-04 00:00:00 |
142 |
6.935704 |
美国 |
C |
38730 rows × 11 columns
根据投票人数来刻画电影的热门
投票人数越多,热门程度越高
使用 np.percentile 进行分位数计算
1
| bins=np.percentile(df['投票人数'],[0,20,40,60,80,100])
|
1
| df['热门程度']=pd.cut(df['投票人数'],bins,labels=['E','D','C','B','A'])
|
|
年代 |
产地 |
Unnamed: 0 |
名字 |
投票人数 |
类型 |
上映时间 |
时长 |
评分 |
首映地点 |
评分等级 |
热门程度 |
0 |
1994 |
美国 |
0 |
肖申克的救赎 |
692795 |
剧情/犯罪 |
1994-09-10 00:00:00 |
142 |
9.600000 |
多伦多电影节 |
A |
A |
1 |
1957 |
美国 |
1 |
控方证人 |
42995 |
剧情/悬疑/犯罪 |
1957-12-17 00:00:00 |
116 |
9.500000 |
美国 |
A |
A |
2 |
1997 |
意大利 |
2 |
美丽人生 |
327855 |
剧情/喜剧/爱情 |
1997-12-20 00:00:00 |
116 |
9.500000 |
意大利 |
A |
A |
3 |
1994 |
美国 |
3 |
阿甘正传 |
580897 |
剧情/爱情 |
1994-06-23 00:00:00 |
142 |
9.400000 |
洛杉矶首映 |
A |
A |
4 |
1993 |
中国大陆 |
4 |
霸王别姬 |
478523 |
剧情/爱情/同性 |
1993-01-01 00:00:00 |
171 |
9.400000 |
香港 |
A |
A |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
38725 |
1935 |
美国 |
38728 |
1935年 |
57 |
喜剧/歌舞 |
1935-03-15 00:00:00 |
98 |
7.600000 |
美国 |
B |
E |
38726 |
1986 |
中国大陆 |
38729 |
血溅画屏 |
95 |
剧情/悬疑/犯罪/武侠/古装 |
1905-06-08 00:00:00 |
91 |
7.100000 |
美国 |
B |
D |
38727 |
1986 |
中国大陆 |
38730 |
魔窟中的幻想 |
51 |
惊悚/恐怖/儿童 |
1905-06-08 00:00:00 |
78 |
8.000000 |
美国 |
B |
E |
38728 |
1977 |
俄罗斯 |
38731 |
列宁格勒围困之星火战役 Блокада: Фильм 2: Ленинградский ме... |
32 |
剧情/战争 |
1905-05-30 00:00:00 |
97 |
6.600000 |
美国 |
C |
E |
38729 |
2017 |
美国 |
38732 |
复仇者联盟3 |
123456 |
剧情/科幻 |
2017-05-04 00:00:00 |
142 |
6.935704 |
美国 |
C |
A |
38730 rows × 12 columns
大烂片:投票人数多,评分低
1
| df[(df.热门程度=='A')&(df.评分等级=='E')]
|
|
年代 |
产地 |
Unnamed: 0 |
名字 |
投票人数 |
类型 |
上映时间 |
时长 |
评分 |
首映地点 |
评分等级 |
热门程度 |
655 |
2011 |
中国大陆 |
655 |
B区 |
5187 |
剧情/惊悚/恐怖 |
2011-06-03 00:00:00 |
89 |
2.3 |
中国大陆 |
E |
A |
4376 |
2014 |
中国大陆 |
4376 |
怖偶 |
4867 |
悬疑/惊悚 |
2014-05-07 00:00:00 |
88 |
2.8 |
中国大陆 |
E |
A |
5413 |
2011 |
中国大陆 |
5413 |
床下有人 |
4309 |
悬疑/惊悚 |
2011-10-14 00:00:00 |
100 |
2.8 |
中国大陆 |
E |
A |
6802 |
2013 |
中国大陆 |
6802 |
帝国秘符 |
4351 |
动作/冒险 |
2013-09-18 00:00:00 |
93 |
3.0 |
中国大陆 |
E |
A |
8232 |
2011 |
中国大陆 |
8232 |
飞天 |
4764 |
剧情 |
2011-07-01 00:00:00 |
115 |
2.9 |
中国大陆 |
E |
A |
8406 |
2014 |
中国大陆 |
8406 |
分手达人 |
3937 |
喜剧/爱情 |
2014-06-06 00:00:00 |
90 |
2.7 |
中国大陆 |
E |
A |
9601 |
2012 |
中国大陆 |
9601 |
孤岛惊魂 |
2982 |
悬疑/惊悚/恐怖 |
2013-01-26 00:00:00 |
93 |
2.8 |
中国大陆 |
E |
A |
10513 |
2013 |
中国大陆 |
10513 |
海天盛宴·韦口 |
3788 |
情色 |
2013-10-12 00:00:00 |
88 |
2.9 |
网络 |
E |
A |
16799 |
2013 |
中国大陆 |
16799 |
孪生密码 |
6390 |
动作/悬疑 |
2013-11-08 00:00:00 |
96 |
2.9 |
中国大陆 |
E |
A |
21533 |
2010 |
日本 |
21536 |
拳皇 |
6329 |
动作/科幻/冒险 |
2012-10-12 00:00:00 |
93 |
3.0 |
中国大陆 |
E |
A |
22705 |
2013 |
中国大陆 |
22708 |
闪魂 |
3119 |
惊悚/犯罪 |
2014-02-21 00:00:00 |
94 |
2.6 |
中国大陆 |
E |
A |
22883 |
2015 |
中国大陆 |
22886 |
少年毛泽东 |
3058 |
动画/儿童/冒险 |
2015-04-30 00:00:00 |
76 |
2.4 |
中国大陆 |
E |
A |
24128 |
2013 |
英国 |
24131 |
史前怪兽 |
3543 |
动作/惊悚/冒险 |
2014-01-01 00:00:00 |
89 |
3.0 |
中国大陆 |
E |
A |
28261 |
2011 |
中国大陆 |
28264 |
无极限之危情速递 |
6319 |
喜剧/动作/爱情/冒险 |
2011-08-12 00:00:00 |
94 |
2.8 |
中国大陆 |
E |
A |
32098 |
2010 |
中国大陆 |
32101 |
异度公寓 |
3639 |
惊悚 |
2010-06-04 00:00:00 |
93 |
2.7 |
中国大陆 |
E |
A |
32491 |
2014 |
中国大陆 |
32494 |
英雄之战 |
8359 |
动作/爱情 |
2014-03-21 00:00:00 |
90 |
3.0 |
中国大陆 |
E |
A |
32664 |
2013 |
中国大陆 |
32667 |
咏春小龙 |
8861 |
剧情/动作 |
2013-07-20 00:00:00 |
90 |
3.0 |
中国大陆 |
E |
A |
33488 |
2014 |
中国大陆 |
33491 |
再爱一次好不好 |
6999 |
喜剧/爱情 |
2014-04-11 00:00:00 |
94 |
3.0 |
中国大陆 |
E |
A |
38657 |
2014 |
中国大陆 |
38660 |
大话天仙 |
21629 |
喜剧/奇幻/古装 |
2014-02-02 00:00:00 |
91 |
3.0 |
中国大陆 |
E |
A |
38659 |
2013 |
中国大陆 |
38662 |
天机·富春山居图 |
74709 |
动作/冒险 |
2013-06-09 00:00:00 |
122 |
2.9 |
中国大陆 |
E |
A |
38660 |
2014 |
中国大陆 |
38663 |
特工艾米拉 |
10852 |
动作/悬疑 |
2014-04-11 00:00:00 |
96 |
2.7 |
中国大陆 |
E |
A |
38664 |
2015 |
中国大陆 |
38667 |
汽车人总动员 |
12892 |
喜剧/动画/冒险 |
2015-07-03 00:00:00 |
85 |
2.3 |
中国大陆 |
E |
A |
38669 |
2016 |
中国大陆 |
38672 |
2016年中央电视台春节 |
17328 |
歌舞/真人秀 |
2016-02-07 00:00:00 |
280 |
2.3 |
中国大陆 |
E |
A |
38675 |
2014 |
中国大陆 |
38678 |
放手爱 |
29254 |
喜剧/爱情 |
2014-04-30 00:00:00 |
93 |
2.3 |
中国大陆 |
E |
A |
冷门高分电影
1
| df[(df.热门程度=='E')&(df.评分等级=='A')]
|
|
年代 |
产地 |
Unnamed: 0 |
名字 |
投票人数 |
类型 |
上映时间 |
时长 |
评分 |
首映地点 |
评分等级 |
热门程度 |
456 |
2015 |
美国 |
456 |
未知电影 |
45 |
音乐 |
2015-12-14 00:00:00 |
60 |
9.3 |
美国 |
A |
E |
587 |
2011 |
英国 |
587 |
BBC喜剧音 |
38 |
喜剧/音乐/歌舞 |
2011-08-13 00:00:00 |
95 |
9.3 |
美国 |
A |
E |
642 |
2003 |
美国 |
642 |
未知电影 |
38 |
纪录片/音乐 |
2003-02-03 00:00:00 |
55 |
9.2 |
美国 |
A |
E |
686 |
2014 |
英国 |
686 |
未知电影 |
63 |
音乐/舞台艺术 |
2014-05-18 00:00:00 |
49 |
9.5 |
美国 |
A |
E |
698 |
2008 |
英国 |
698 |
未知电影 |
52 |
纪录片 |
2008-07-25 00:00:00 |
40 |
9.8 |
美国 |
A |
E |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
37579 |
1986 |
英国 |
37582 |
歌唱神探 |
36 |
剧情/悬疑/歌舞 |
1986-11-16 00:00:00 |
415 |
9.1 |
美国 |
A |
E |
37705 |
1972 |
美国 |
37708 |
未知电影 |
56 |
纪录片 |
1972-12-23 00:00:00 |
70 |
9.3 |
美国 |
A |
E |
38111 |
1975 |
美国 |
38114 |
山那边 |
70 |
剧情 |
1975-11-14 00:00:00 |
103 |
9.1 |
美国 |
A |
E |
38444 |
2015 |
美国 |
38447 |
奎 |
62 |
纪录片/短片 |
2015-08-19 00:00:00 |
9 |
9.1 |
纽约电影论坛 |
A |
E |
38500 |
2007 |
英国 |
38503 |
未知电影 |
41 |
纪录片/短片 |
1905-06-29 00:00:00 |
57 |
9.2 |
美国 |
A |
E |
245 rows × 12 columns
将处理的数据保存
1
| df.to_excel('movies_data3.xlsx')
|
3.3.4 合并数据集
(1)append
先把数据集拆分为多个,再进行合并
1 2
| df_usa=df[df.产地=='美国'] df_cn=df[df.产地=='中国大陆']
|
|
年代 |
产地 |
Unnamed: 0 |
名字 |
投票人数 |
类型 |
上映时间 |
时长 |
评分 |
首映地点 |
评分等级 |
热门程度 |
4 |
1993 |
中国大陆 |
4 |
霸王别姬 |
478523 |
剧情/爱情/同性 |
1993-01-01 00:00:00 |
171 |
9.400000 |
香港 |
A |
A |
21 |
1961 |
中国大陆 |
21 |
大闹天宫 |
74881 |
动画/奇幻 |
1905-05-14 00:00:00 |
114 |
9.200000 |
上集 |
A |
A |
29 |
2015 |
中国大陆 |
29 |
穹顶之下 |
51113 |
纪录片 |
2015-02-28 00:00:00 |
104 |
9.200000 |
中国大陆 |
A |
A |
38 |
1982 |
中国大陆 |
38 |
茶馆 |
10678 |
剧情/历史 |
1905-06-04 00:00:00 |
118 |
9.200000 |
美国 |
A |
A |
45 |
1988 |
中国大陆 |
45 |
山水情 |
10781 |
动画/短片 |
1905-06-10 00:00:00 |
19 |
9.200000 |
美国 |
A |
A |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
38718 |
1987 |
美国 |
38721 |
零下的激情 |
199 |
剧情/爱情/犯罪 |
1987-11-06 00:00:00 |
98 |
7.400000 |
美国 |
B |
D |
38720 |
1986 |
美国 |
38723 |
离别秋波 |
240 |
剧情/爱情/音乐 |
1986-02-19 00:00:00 |
90 |
8.200000 |
美国 |
B |
C |
38723 |
1986 |
美国 |
38726 |
极乐森林 |
45 |
纪录片 |
1986-09-14 00:00:00 |
90 |
8.100000 |
美国 |
B |
E |
38725 |
1935 |
美国 |
38728 |
1935年 |
57 |
喜剧/歌舞 |
1935-03-15 00:00:00 |
98 |
7.600000 |
美国 |
B |
E |
38729 |
2017 |
美国 |
38732 |
复仇者联盟3 |
123456 |
剧情/科幻 |
2017-05-04 00:00:00 |
142 |
6.935704 |
美国 |
C |
A |
15781 rows × 12 columns
(2)merge
pd.merge(left, right, how=’inner’, on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=(‘_x’,’_y’), copy=True, indicator=False)
left:对象
right:另一个对象
on:要加入的列。必须在左、右综合对象中找到。如果不能通过,left_index和right_index是假,将推断DataFrame中的列的交叉点为连接键
left_on:从左边的综合使用作为键列。可以是列名或数组的长度等于长度综合。
right_on:从右边的综合使用作为键列。可以是列名或数组的长度等于长度综合。
left_index:如果为True,则使用索引(行标签)从左综合作为其连接键。在与多重(层次)的综合,级别数必须匹配连接键从右综合的数目。
right_index:先沟通用法作为正确综合left_index。
how:之一‘左’,‘右’,‘外在’,‘内部’。默认为内联。
sort:综合通过连接键按字典顺序对结果进行排序。默认为True,设置为False在大多数情况下将提高性能。
suffixes:字符串后缀并不适用于重叠列的元组。默认为(’_x’,’_y’)
copy:即使重新索引是不必要总是从传递的综合对象,赋值的数据(默认为True)。在许多情况下不能避免,但可能会提高性能/内存使用情况,可以避免赋值上述案件有些病理,但尽管如此提供此选项。
indicator:将列添加到输出综合呼吁_merge与信息源的每一行。_merge是绝对类型,并对观测其合并键只出现在‘左’的综合,关策其合并键只会出现在‘正确’的综合,和两个如果观测合并关键发现在两个 right_only left_only 的值。
选取6部热门电影进行操作
|
年代 |
产地 |
Unnamed: 0 |
名字 |
投票人数 |
类型 |
上映时间 |
时长 |
评分 |
首映地点 |
评分等级 |
热门程度 |
0 |
1994 |
美国 |
0 |
肖申克的救赎 |
692795 |
剧情/犯罪 |
1994-09-10 00:00:00 |
142 |
9.6 |
多伦多电影节 |
A |
A |
1 |
1957 |
美国 |
1 |
控方证人 |
42995 |
剧情/悬疑/犯罪 |
1957-12-17 00:00:00 |
116 |
9.5 |
美国 |
A |
A |
2 |
1997 |
意大利 |
2 |
美丽人生 |
327855 |
剧情/喜剧/爱情 |
1997-12-20 00:00:00 |
116 |
9.5 |
意大利 |
A |
A |
3 |
1994 |
美国 |
3 |
阿甘正传 |
580897 |
剧情/爱情 |
1994-06-23 00:00:00 |
142 |
9.4 |
洛杉矶首映 |
A |
A |
4 |
1993 |
中国大陆 |
4 |
霸王别姬 |
478523 |
剧情/爱情/同性 |
1993-01-01 00:00:00 |
171 |
9.4 |
香港 |
A |
A |
5 |
2012 |
美国 |
5 |
泰坦尼克号 |
157074 |
剧情/爱情/灾难 |
2012-04-10 00:00:00 |
194 |
9.4 |
中国大陆 |
A |
A |
1 2 3
| df2=df.loc[:5][['名字','产地']] df2['票房']=[111,222,333,444,555,666] df2
|
|
名字 |
产地 |
票房 |
0 |
肖申克的救赎 |
美国 |
111 |
1 |
控方证人 |
美国 |
222 |
2 |
美丽人生 |
意大利 |
333 |
3 |
阿甘正传 |
美国 |
444 |
4 |
霸王别姬 |
中国大陆 |
555 |
5 |
泰坦尼克号 |
美国 |
666 |
1 2 3
| df2=df2.sample(frac=1) df2
|
|
名字 |
产地 |
票房 |
0 |
肖申克的救赎 |
美国 |
111 |
5 |
泰坦尼克号 |
美国 |
666 |
4 |
霸王别姬 |
中国大陆 |
555 |
2 |
美丽人生 |
意大利 |
333 |
1 |
控方证人 |
美国 |
222 |
3 |
阿甘正传 |
美国 |
444 |
1 2 3
| df2.index=range(len(df2)) df2
|
|
名字 |
产地 |
票房 |
0 |
肖申克的救赎 |
美国 |
111 |
1 |
泰坦尼克号 |
美国 |
666 |
2 |
霸王别姬 |
中国大陆 |
555 |
3 |
美丽人生 |
意大利 |
333 |
4 |
控方证人 |
美国 |
222 |
5 |
阿甘正传 |
美国 |
444 |
对df1和df2进行合并
1
| pd.merge(df1,df2,how='inner',on='名字')
|
|
年代 |
产地_x |
Unnamed: 0 |
名字 |
投票人数 |
类型 |
上映时间 |
时长 |
评分 |
首映地点 |
评分等级 |
热门程度 |
产地_y |
票房 |
0 |
1994 |
美国 |
0 |
肖申克的救赎 |
692795 |
剧情/犯罪 |
1994-09-10 00:00:00 |
142 |
9.6 |
多伦多电影节 |
A |
A |
美国 |
111 |
1 |
1957 |
美国 |
1 |
控方证人 |
42995 |
剧情/悬疑/犯罪 |
1957-12-17 00:00:00 |
116 |
9.5 |
美国 |
A |
A |
美国 |
222 |
2 |
1997 |
意大利 |
2 |
美丽人生 |
327855 |
剧情/喜剧/爱情 |
1997-12-20 00:00:00 |
116 |
9.5 |
意大利 |
A |
A |
意大利 |
333 |
3 |
1994 |
美国 |
3 |
阿甘正传 |
580897 |
剧情/爱情 |
1994-06-23 00:00:00 |
142 |
9.4 |
洛杉矶首映 |
A |
A |
美国 |
444 |
4 |
1993 |
中国大陆 |
4 |
霸王别姬 |
478523 |
剧情/爱情/同性 |
1993-01-01 00:00:00 |
171 |
9.4 |
香港 |
A |
A |
中国大陆 |
555 |
5 |
2012 |
美国 |
5 |
泰坦尼克号 |
157074 |
剧情/爱情/灾难 |
2012-04-10 00:00:00 |
194 |
9.4 |
中国大陆 |
A |
A |
美国 |
666 |
两个样本都有 产地 列,所以会有两个产地列
(3)concat
将多个数据集进行批量合并
1 2 3
| df1=df[:5] df2=df[100:105] df3=df[200:205]
|
1 2 3
| print(df1) print(df2) print(df3)
|
年代 产地 Unnamed: 0 名字 投票人数 类型 上映时间 时长 \
0 1994 美国 0 肖申克的救赎 692795 剧情/犯罪 1994-09-10 00:00:00 142
1 1957 美国 1 控方证人 42995 剧情/悬疑/犯罪 1957-12-17 00:00:00 116
2 1997 意大利 2 美丽人生 327855 剧情/喜剧/爱情 1997-12-20 00:00:00 116
3 1994 美国 3 阿甘正传 580897 剧情/爱情 1994-06-23 00:00:00 142
4 1993 中国大陆 4 霸王别姬 478523 剧情/爱情/同性 1993-01-01 00:00:00 171
评分 首映地点 评分等级 热门程度
0 9.6 多伦多电影节 A A
1 9.5 美国 A A
2 9.5 意大利 A A
3 9.4 洛杉矶首映 A A
4 9.4 香港 A A
年代 产地 Unnamed: 0 名字 投票人数 类型 上映时间 \
100 1993 韩国 100 101 146 喜剧/爱情 1993-06-19 00:00:00
101 1995 英国 101 10 186 喜剧 1995-01-25 00:00:00
102 2013 韩国 102 素媛 114819 剧情/家庭 2013-10-02 00:00:00
103 2003 美国 103 101忠狗续集:伦敦 924 喜剧/动画/家庭 2003-01-21 00:00:00
104 2000 美国 104 10 9514 喜剧/家庭 2000-09-22 00:00:00
时长 评分 首映地点 评分等级 热门程度
100 112 7.4 韩国 B D
101 101 7.4 美国 B D
102 123 9.1 韩国 A A
103 70 7.5 美国 B B
104 100 7.0 美国 C A
年代 产地 Unnamed: 0 名字 投票人数 类型 \
200 2014 日本 200 最完美的离婚 2014特别篇 18478 剧情/喜剧/爱情
201 2009 日本 201 2001夜物 84 剧情/动画
202 2009 中国香港 202 头七 頭 7039 恐怖
203 1896 法国 203 火车进站 L 7001 纪录片/短片
204 2009 美国 204 银行舞蹈 6944 短片
上映时间 时长 评分 首映地点 评分等级 热门程度
200 2014-02-08 00:00:00 120 9.1 日本 A A
201 2009-10-02 00:00:00 80 6.6 美国 C D
202 2009-05-21 00:00:00 60 6.2 美国 C A
203 1896-01-06 60 8.8 法国 B A
204 1905-07-01 00:00:00 60 7.8 美国 B A
1 2
| dff=pd.concat([df1,df2,df3],axis=0) dff
|
|
年代 |
产地 |
Unnamed: 0 |
名字 |
投票人数 |
类型 |
上映时间 |
时长 |
评分 |
首映地点 |
评分等级 |
热门程度 |
0 |
1994 |
美国 |
0 |
肖申克的救赎 |
692795 |
剧情/犯罪 |
1994-09-10 00:00:00 |
142 |
9.6 |
多伦多电影节 |
A |
A |
1 |
1957 |
美国 |
1 |
控方证人 |
42995 |
剧情/悬疑/犯罪 |
1957-12-17 00:00:00 |
116 |
9.5 |
美国 |
A |
A |
2 |
1997 |
意大利 |
2 |
美丽人生 |
327855 |
剧情/喜剧/爱情 |
1997-12-20 00:00:00 |
116 |
9.5 |
意大利 |
A |
A |
3 |
1994 |
美国 |
3 |
阿甘正传 |
580897 |
剧情/爱情 |
1994-06-23 00:00:00 |
142 |
9.4 |
洛杉矶首映 |
A |
A |
4 |
1993 |
中国大陆 |
4 |
霸王别姬 |
478523 |
剧情/爱情/同性 |
1993-01-01 00:00:00 |
171 |
9.4 |
香港 |
A |
A |
100 |
1993 |
韩国 |
100 |
101 |
146 |
喜剧/爱情 |
1993-06-19 00:00:00 |
112 |
7.4 |
韩国 |
B |
D |
101 |
1995 |
英国 |
101 |
10 |
186 |
喜剧 |
1995-01-25 00:00:00 |
101 |
7.4 |
美国 |
B |
D |
102 |
2013 |
韩国 |
102 |
素媛 |
114819 |
剧情/家庭 |
2013-10-02 00:00:00 |
123 |
9.1 |
韩国 |
A |
A |
103 |
2003 |
美国 |
103 |
101忠狗续集:伦敦 |
924 |
喜剧/动画/家庭 |
2003-01-21 00:00:00 |
70 |
7.5 |
美国 |
B |
B |
104 |
2000 |
美国 |
104 |
10 |
9514 |
喜剧/家庭 |
2000-09-22 00:00:00 |
100 |
7.0 |
美国 |
C |
A |
200 |
2014 |
日本 |
200 |
最完美的离婚 2014特别篇 |
18478 |
剧情/喜剧/爱情 |
2014-02-08 00:00:00 |
120 |
9.1 |
日本 |
A |
A |
201 |
2009 |
日本 |
201 |
2001夜物 |
84 |
剧情/动画 |
2009-10-02 00:00:00 |
80 |
6.6 |
美国 |
C |
D |
202 |
2009 |
中国香港 |
202 |
头七 頭 |
7039 |
恐怖 |
2009-05-21 00:00:00 |
60 |
6.2 |
美国 |
C |
A |
203 |
1896 |
法国 |
203 |
火车进站 L |
7001 |
纪录片/短片 |
1896-01-06 |
60 |
8.8 |
法国 |
B |
A |
204 |
2009 |
美国 |
204 |
银行舞蹈 |
6944 |
短片 |
1905-07-01 00:00:00 |
60 |
7.8 |
美国 |
B |
A |
感谢鼓励