数学建模自用
python数据分析之Pandas(3)
导入包
import pandas as pd
import numpy as np
读入数据
df = pd.read_excel('movie_data2.xlsx', index_col = 0)
df[:5]
名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|---|---|
0 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 美国 | 1994-09-10 00:00:00 | 142 | 1994 | 9.6 | 多伦多电影节 |
1 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 美国 | 1957-12-17 00:00:00 | 116 | 1957 | 9.5 | 美国 |
2 | 美丽人生 | 327855 | 剧情/喜剧/爱情 | 意大利 | 1997-12-20 00:00:00 | 116 | 1997 | 9.5 | 意大利 |
3 | 阿甘正传 | 580897 | 剧情/爱情 | 美国 | 1994-06-23 00:00:00 | 142 | 1994 | 9.4 | 洛杉矶首映 |
4 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 中国大陆 | 1993-01-01 00:00:00 | 171 | 1993 | 9.4 | 香港 |
3.1 数据重塑和轴向旋转
(1)层次化索引
层次化索引是pandas的一项重要功能,它能使我们在一个轴上拥有多个索引。
Series的层次化索引:
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
s.index
MultiIndex([(‘a’, 1),
(‘a’, 2),
(‘a’, 3),
(‘b’, 1),
(‘b’, 2),
(‘c’, 3),
(‘c’, 1),
(‘d’, 2),
(‘d’, 3)],
)
s['a'] #外层索引
1 1
2 2
3 3
dtype: int32
s['a':'c'] #切片
a 1 1
2 2
3 3
b 1 4
2 5
c 3 6
1 7
dtype: int32
s[:,1] #内层索引
a 1
b 4
c 7
dtype: int32
s['c',3] #提取具体的值
6
通过unstack方法可以将Series变成一个DataFrame
s.unstack()
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 |
s.unstack().stack() #形式上的相互转换
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来说,行和列都能进行层次化索引。
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 |
data['A']
Z | X | ||
---|---|---|---|
a | 1 | 0 | 1 |
2 | 3 | 4 | |
b | 1 | 6 | 7 |
2 | 9 | 10 |
data.index.names = ["row1","row2"]
data.columns.names = ["col1", "col2"]
data
col1 | A | B | ||
---|---|---|---|---|
col2 | Z | X | C | |
row1 | row2 | |||
a | 1 | 0 | 1 | 2 |
2 | 3 | 4 | 5 | |
b | 1 | 6 | 7 | 8 |
2 | 9 | 10 | 11 |
data.swaplevel("row1","row2") #位置调整
col1 | A | B | ||
---|---|---|---|---|
col2 | 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 |
了解了层次化索引的基本知识之后,我们试着将电影数据也处理成一种多层索引的结构。
df.index #默认索引
Index([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
…
38153, 38154, 38155, 38156, 38157, 38158, 38159, 38160, 38161, 38162],
dtype=‘int64’, length=38163)
把产地和年代同时设成索引,产地是外层索引,年代为内层索引。
set_index可以把列变成索引
reset_index是把索引变成列
df = df.set_index(["产地", "年代"])
df
名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | ||
---|---|---|---|---|---|---|---|---|
产地 | 年代 | |||||||
美国 | 1994 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 1994-09-10 00:00:00 | 142 | 9.600000 | 多伦多电影节 |
1957 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 1957-12-17 00:00:00 | 116 | 9.500000 | 美国 | |
意大利 | 1997 | 美丽人生 | 327855 | 剧情/喜剧/爱情 | 1997-12-20 00:00:00 | 116 | 9.500000 | 意大利 |
美国 | 1994 | 阿甘正传 | 580897 | 剧情/爱情 | 1994-06-23 00:00:00 | 142 | 9.400000 | 洛杉矶首映 |
中国大陆 | 1993 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 1993-01-01 00:00:00 | 171 | 9.400000 | 香港 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
美国 | 1935 | 1935年 | 57 | 喜剧/歌舞 | 1935-03-15 00:00:00 | 98 | 7.600000 | 美国 |
中国大陆 | 1986 | 血溅画屏 | 95 | 剧情/悬疑/犯罪/武侠/古装 | 1905-06-08 00:00:00 | 91 | 7.100000 | 美国 |
1986 | 魔窟中的幻想 | 51 | 惊悚/恐怖/儿童 | 1905-06-08 00:00:00 | 78 | 8.000000 | 美国 | |
俄罗斯 | 1977 | 列宁格勒围困之星火战役 Блокада: Фильм 2: Ленинградский ме... | 32 | 剧情/战争 | 1905-05-30 00:00:00 | 97 | 6.600000 | 美国 |
美国 | 2018 | 复仇者联盟3 | 123456 | 剧情/科幻 | 2018-05-04 00:00:00 | 142 | 6.935704 | 美国 |
38163 rows × 7 columns
每一个索引都是一个元组
df.index[0]
(‘美国’, 1994)
获取所有的美国电影,由于产地信息已经变成了索引,因此要是用.loc方法。
df.loc["美国"] #行标签索引行数据,注意索引多行时两边都是闭区间
名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|
年代 | |||||||
1994 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 1994-09-10 00:00:00 | 142 | 9.600000 | 多伦多电影节 |
1957 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 1957-12-17 00:00:00 | 116 | 9.500000 | 美国 |
1994 | 阿甘正传 | 580897 | 剧情/爱情 | 1994-06-23 00:00:00 | 142 | 9.400000 | 洛杉矶首映 |
2012 | 泰坦尼克号 | 157074 | 剧情/爱情/灾难 | 2012-04-10 00:00:00 | 194 | 9.400000 | 中国大陆 |
1993 | 辛德勒的名单 | 306904 | 剧情/历史/战争 | 1993-11-30 00:00:00 | 195 | 9.400000 | 华盛顿首映 |
... | ... | ... | ... | ... | ... | ... | ... |
1987 | 零下的激情 | 199 | 剧情/爱情/犯罪 | 1987-11-06 00:00:00 | 98 | 7.400000 | 美国 |
1986 | 离别秋波 | 240 | 剧情/爱情/音乐 | 1986-02-19 00:00:00 | 90 | 8.200000 | 美国 |
1986 | 极乐森林 | 45 | 纪录片 | 1986-09-14 00:00:00 | 90 | 8.100000 | 美国 |
1935 | 1935年 | 57 | 喜剧/歌舞 | 1935-03-15 00:00:00 | 98 | 7.600000 | 美国 |
2018 | 复仇者联盟3 | 123456 | 剧情/科幻 | 2018-05-04 00:00:00 | 142 | 6.935704 | 美国 |
11714 rows × 7 columns
df.loc["中国大陆"]
名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|
年代 | |||||||
1993 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 1993-01-01 00:00:00 | 171 | 9.4 | 香港 |
1961 | 大闹天宫 | 74881 | 动画/奇幻 | 1905-05-14 00:00:00 | 114 | 9.2 | 上集 |
2015 | 穹顶之下 | 51113 | 纪录片 | 2015-02-28 00:00:00 | 104 | 9.2 | 中国大陆 |
1982 | 茶馆 | 10678 | 剧情/历史 | 1905-06-04 00:00:00 | 118 | 9.2 | 美国 |
1988 | 山水情 | 10781 | 动画/短片 | 1905-06-10 00:00:00 | 19 | 9.2 | 美国 |
... | ... | ... | ... | ... | ... | ... | ... |
1986 | T省的八四、八五 | 380 | 剧情 | 1905-06-08 00:00:00 | 94 | 8.7 | 美国 |
1986 | 失踪的女中学生 | 101 | 儿童 | 1905-06-08 00:00:00 | 102 | 7.4 | 美国 |
1986 | 血战台儿庄 | 2908 | 战争 | 1905-06-08 00:00:00 | 120 | 8.1 | 美国 |
1986 | 血溅画屏 | 95 | 剧情/悬疑/犯罪/武侠/古装 | 1905-06-08 00:00:00 | 91 | 7.1 | 美国 |
1986 | 魔窟中的幻想 | 51 | 惊悚/恐怖/儿童 | 1905-06-08 00:00:00 | 78 | 8.0 | 美国 |
3791 rows × 7 columns
这样做的最大好处是我们可以简化很多的筛选环节
每一个索引是一个元组
df = df.swaplevel("产地", "年代") #调换标签顺序
df
名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | ||
---|---|---|---|---|---|---|---|---|
年代 | 产地 | |||||||
1994 | 美国 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 1994-09-10 00:00:00 | 142 | 9.600000 | 多伦多电影节 |
1957 | 美国 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 1957-12-17 00:00:00 | 116 | 9.500000 | 美国 |
1997 | 意大利 | 美丽人生 | 327855 | 剧情/喜剧/爱情 | 1997-12-20 00:00:00 | 116 | 9.500000 | 意大利 |
1994 | 美国 | 阿甘正传 | 580897 | 剧情/爱情 | 1994-06-23 00:00:00 | 142 | 9.400000 | 洛杉矶首映 |
1993 | 中国大陆 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 1993-01-01 00:00:00 | 171 | 9.400000 | 香港 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
1935 | 美国 | 1935年 | 57 | 喜剧/歌舞 | 1935-03-15 00:00:00 | 98 | 7.600000 | 美国 |
1986 | 中国大陆 | 血溅画屏 | 95 | 剧情/悬疑/犯罪/武侠/古装 | 1905-06-08 00:00:00 | 91 | 7.100000 | 美国 |
中国大陆 | 魔窟中的幻想 | 51 | 惊悚/恐怖/儿童 | 1905-06-08 00:00:00 | 78 | 8.000000 | 美国 | |
1977 | 俄罗斯 | 列宁格勒围困之星火战役 Блокада: Фильм 2: Ленинградский ме... | 32 | 剧情/战争 | 1905-05-30 00:00:00 | 97 | 6.600000 | 美国 |
2018 | 美国 | 复仇者联盟3 | 123456 | 剧情/科幻 | 2018-05-04 00:00:00 | 142 | 6.935704 | 美国 |
38163 rows × 7 columns
df.loc[1994]
名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|
产地 | |||||||
美国 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 1994-09-10 00:00:00 | 142 | 9.6 | 多伦多电影节 |
美国 | 阿甘正传 | 580897 | 剧情/爱情 | 1994-06-23 00:00:00 | 142 | 9.4 | 洛杉矶首映 |
法国 | 这个杀手不太冷 | 662552 | 剧情/动作/犯罪 | 1994-09-14 00:00:00 | 133 | 9.4 | 法国 |
美国 | 34街的 | 768 | 剧情/家庭/奇幻 | 1994-12-23 00:00:00 | 114 | 7.9 | 美国 |
中国大陆 | 活着 | 202794 | 剧情/家庭 | 1994-05-18 00:00:00 | 132 | 9.0 | 法国 |
... | ... | ... | ... | ... | ... | ... | ... |
美国 | 鬼精灵2: 恐怖 | 60 | 喜剧/恐怖/奇幻 | 1994-04-08 00:00:00 | 85 | 5.8 | 美国 |
英国 | 黑色第16 | 44 | 剧情/惊悚 | 1996-02-01 00:00:00 | 106 | 6.8 | 美国 |
日本 | 蜡笔小新之布里布里王国的秘密宝藏 クレヨンしんちゃん ブリブリ王国の | 2142 | 动画 | 1994-04-23 00:00:00 | 94 | 7.7 | 日本 |
日本 | 龙珠Z剧场版10:两人面临危机! 超战士难以成眠 ドラゴンボール Z 劇場版:危険なふたり! | 579 | 动画 | 1994-03-12 00:00:00 | 53 | 7.2 | 美国 |
中国香港 | 重案实录之惊天械劫案 重案實錄之驚天械劫 | 90 | 动作/犯罪 | 1905-06-16 00:00:00 | 114 | 7.3 | 美国 |
489 rows × 7 columns
取消层次化索引
df = df.reset_index()
df[:5]
年代 | 产地 | 名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|---|---|
0 | 1994 | 美国 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 1994-09-10 00:00:00 | 142 | 9.6 | 多伦多电影节 |
1 | 1957 | 美国 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 1957-12-17 00:00:00 | 116 | 9.5 | 美国 |
2 | 1997 | 意大利 | 美丽人生 | 327855 | 剧情/喜剧/爱情 | 1997-12-20 00:00:00 | 116 | 9.5 | 意大利 |
3 | 1994 | 美国 | 阿甘正传 | 580897 | 剧情/爱情 | 1994-06-23 00:00:00 | 142 | 9.4 | 洛杉矶首映 |
4 | 1993 | 中国大陆 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 1993-01-01 00:00:00 | 171 | 9.4 | 香港 |
(2)数据旋转
行列转化:以前5部电影为例
data = df[:5]
data
年代 | 产地 | 名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|---|---|
0 | 1994 | 美国 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 1994-09-10 00:00:00 | 142 | 9.6 | 多伦多电影节 |
1 | 1957 | 美国 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 1957-12-17 00:00:00 | 116 | 9.5 | 美国 |
2 | 1997 | 意大利 | 美丽人生 | 327855 | 剧情/喜剧/爱情 | 1997-12-20 00:00:00 | 116 | 9.5 | 意大利 |
3 | 1994 | 美国 | 阿甘正传 | 580897 | 剧情/爱情 | 1994-06-23 00:00:00 | 142 | 9.4 | 洛杉矶首映 |
4 | 1993 | 中国大陆 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 1993-01-01 00:00:00 | 171 | 9.4 | 香港 |
.T可以直接让数据的行列进行交换(转置)
data.T
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
年代 | 1994 | 1957 | 1997 | 1994 | 1993 |
产地 | 美国 | 美国 | 意大利 | 美国 | 中国大陆 |
名字 | 肖申克的救赎 | 控方证人 | 美丽人生 | 阿甘正传 | 霸王别姬 |
投票人数 | 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
data.stack()
0 年代 1994
产地 美国
名字 肖申克的救赎
投票人数 692795
类型 剧情/犯罪
上映时间 1994-09-10 00:00:00
时长 142
评分 9.6
首映地点 多伦多电影节
1 年代 1957
产地 美国
名字 控方证人
投票人数 42995
类型 剧情/悬疑/犯罪
上映时间 1957-12-17 00:00:00
时长 116
评分 9.5
首映地点 美国
2 年代 1997
产地 意大利
名字 美丽人生
投票人数 327855
类型 剧情/喜剧/爱情
上映时间 1997-12-20 00:00:00
时长 116
评分 9.5
首映地点 意大利
3 年代 1994
产地 美国
名字 阿甘正传
投票人数 580897
类型 剧情/爱情
上映时间 1994-06-23 00:00:00
时长 142
评分 9.4
首映地点 洛杉矶首映
4 年代 1993
产地 中国大陆
名字 霸王别姬
投票人数 478523
类型 剧情/爱情/同性
上映时间 1993-01-01 00:00:00
时长 171
评分 9.4
首映地点 香港
dtype: object
data.stack().unstack() #转回来
年代 | 产地 | 名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|---|---|
0 | 1994 | 美国 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 1994-09-10 00:00:00 | 142 | 9.6 | 多伦多电影节 |
1 | 1957 | 美国 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 1957-12-17 00:00:00 | 116 | 9.5 | 美国 |
2 | 1997 | 意大利 | 美丽人生 | 327855 | 剧情/喜剧/爱情 | 1997-12-20 00:00:00 | 116 | 9.5 | 意大利 |
3 | 1994 | 美国 | 阿甘正传 | 580897 | 剧情/爱情 | 1994-06-23 00:00:00 | 142 | 9.4 | 洛杉矶首映 |
4 | 1993 | 中国大陆 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 1993-01-01 00:00:00 | 171 | 9.4 | 香港 |
3.2 数据分组,分组运算
GroupBy技术:实现数据的分组,和分组运算,作用类似于数据透视表
按照电影的产地进行分组
group = df.groupby(df["产地"])
先定义一个分组变量group
type(group)
pandas.core.groupby.generic.DataFrameGroupBy
可以计算分组后各个的统计量
group.mean(numeric_only = True) #只对数值变量做统计
年代 | 投票人数 | 时长 | 评分 | |
---|---|---|---|---|
产地 | ||||
中国台湾 | 1999.009709 | 8474.864078 | 87.257282 | 7.066667 |
中国大陆 | 2004.582432 | 10915.587708 | 81.517014 | 6.062991 |
中国香港 | 1991.088865 | 8141.709870 | 88.553214 | 6.473551 |
丹麦 | 1999.091371 | 2003.781726 | 88.507614 | 7.246701 |
俄罗斯 | 1984.892857 | 1021.180672 | 96.100840 | 7.557143 |
其他 | 1998.721721 | 1619.144450 | 87.656399 | 7.226713 |
加拿大 | 2002.520451 | 1921.834979 | 80.592384 | 6.727221 |
印度 | 2006.039326 | 3219.587079 | 120.949438 | 6.864888 |
墨西哥 | 1992.786325 | 1191.982906 | 92.641026 | 7.085470 |
巴西 | 1999.888889 | 3606.333333 | 88.373737 | 7.232323 |
德国 | 1996.053869 | 2624.736533 | 92.258570 | 7.187365 |
意大利 | 1985.599190 | 3374.955466 | 104.333333 | 7.183131 |
日本 | 1999.886536 | 3592.015781 | 85.010587 | 7.192569 |
比利时 | 1999.503650 | 1244.153285 | 83.065693 | 7.197080 |
法国 | 1991.794044 | 3663.066380 | 90.249013 | 7.243093 |
波兰 | 1987.027624 | 881.640884 | 80.734807 | 7.441989 |
泰国 | 2009.129252 | 5322.724490 | 88.442177 | 6.109184 |
澳大利亚 | 2002.966102 | 4798.111864 | 85.593220 | 6.953559 |
瑞典 | 1987.106952 | 1549.700535 | 94.625668 | 7.425668 |
美国 | 1994.519891 | 8677.294861 | 89.976097 | 6.923351 |
英国 | 1996.630926 | 4979.837848 | 89.213318 | 7.498420 |
荷兰 | 2001.198675 | 957.589404 | 75.887417 | 7.160265 |
西班牙 | 2001.546275 | 3355.266366 | 90.905192 | 7.025056 |
阿根廷 | 2004.212389 | 2283.938053 | 92.548673 | 7.248673 |
韩国 | 2008.102086 | 6527.518629 | 100.018629 | 6.351118 |
group.sum(numeric_only = True)
年代 | 投票人数 | 时长 | 评分 | |
---|---|---|---|---|
产地 | ||||
中国台湾 | 1235388 | 5237466 | 53925 | 4367.200000 |
中国大陆 | 7599372 | 41380993 | 309031 | 22984.800000 |
中国香港 | 5668630 | 23179448 | 252111 | 18430.200000 |
丹麦 | 393821 | 394745 | 17436 | 1427.600000 |
俄罗斯 | 944809 | 486082 | 45744 | 3597.200000 |
其他 | 3763593 | 3048849 | 165057 | 13607.900000 |
加拿大 | 1419787 | 1362581 | 57140 | 4769.600000 |
印度 | 714150 | 1146173 | 43058 | 2443.900000 |
墨西哥 | 233156 | 139462 | 10839 | 829.000000 |
巴西 | 197989 | 357027 | 8749 | 716.000000 |
德国 | 2037971 | 2679856 | 94196 | 7338.300000 |
意大利 | 1471329 | 2500842 | 77311 | 5322.700000 |
日本 | 10011432 | 17981631 | 425563 | 36006.000000 |
比利时 | 273932 | 170449 | 11380 | 986.000000 |
法国 | 5551130 | 10208966 | 251524 | 20186.500000 |
波兰 | 359652 | 159577 | 14613 | 1347.000000 |
泰国 | 590684 | 1564881 | 26002 | 1796.100000 |
澳大利亚 | 590875 | 1415443 | 25250 | 2051.300000 |
瑞典 | 371589 | 289794 | 17695 | 1388.600000 |
美国 | 23363806 | 101645832 | 1053980 | 81100.135704 |
英国 | 5307045 | 13236409 | 237129 | 19930.800000 |
荷兰 | 302181 | 144596 | 11459 | 1081.200000 |
西班牙 | 886685 | 1486383 | 40271 | 3112.100000 |
阿根廷 | 226476 | 258085 | 10458 | 819.100000 |
韩国 | 2694873 | 8759930 | 134225 | 8523.200000 |
计算每年的平均评分
df["评分"].groupby(df["年代"]).mean()
年代
1888 7.950000
1890 4.800000
1892 7.500000
1894 6.633333
1895 7.575000
…
2013 6.375974
2014 6.249384
2015 6.121925
2016 5.834524
2018 6.935704
Name: 评分, Length: 127, dtype: float64
我们也可以传入多个分组变量
df.groupby([df["产地"],df["年代"]]).mean(numeric_only = True) #根据两个变量进行分组
投票人数 | 时长 | 评分 | ||
---|---|---|---|---|
产地 | 年代 | |||
中国台湾 | 1963 | 121.000000 | 113.000000 | 6.400000 |
1965 | 153.666667 | 105.000000 | 6.800000 | |
1966 | 51.000000 | 60.000000 | 7.900000 | |
1967 | 4444.000000 | 112.000000 | 8.000000 | |
1968 | 89.000000 | 83.000000 | 7.400000 | |
... | ... | ... | ... | ... |
韩国 | 2012 | 5812.542857 | 100.771429 | 6.035238 |
2013 | 10470.370370 | 97.731481 | 6.062037 | |
2014 | 3776.266667 | 98.666667 | 5.650833 | |
2015 | 3209.247706 | 100.266055 | 5.423853 | |
2016 | 1739.850000 | 106.100000 | 5.730000 |
1578 rows × 3 columns
获得每个地区,每一年的电影的评分的均值
group = df["评分"].groupby([df["产地"], df["年代"]])
means = group.mean(numeric_only = True)
means
产地 年代
中国台湾 1963 6.400000
1965 6.800000
1966 7.900000
1967 8.000000
1968 7.400000
…
韩国 2012 6.035238
2013 6.062037
2014 5.650833
2015 5.423853
2016 5.730000
Name: 评分, Length: 1578, dtype: float64
Series通过unstack方法转化为dataframe
会产生缺失值
means.unstack().T
产地 | 中国台湾 | 中国大陆 | 中国香港 | 丹麦 | 俄罗斯 | 其他 | 加拿大 | 印度 | 墨西哥 | 巴西 | ... | 波兰 | 泰国 | 澳大利亚 | 瑞典 | 美国 | 英国 | 荷兰 | 西班牙 | 阿根廷 | 韩国 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
年代 | |||||||||||||||||||||
1888 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | 7.950000 | NaN | NaN | NaN | NaN |
1890 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | 4.800000 | NaN | NaN | NaN | NaN | NaN |
1892 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
1894 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | 6.450000 | NaN | NaN | NaN | NaN | NaN |
1895 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
2013 | 7.076471 | 5.306500 | 6.105714 | 6.555556 | 6.875000 | 6.853571 | 6.018182 | 6.400000 | 6.983333 | 8.00 | ... | 6.966667 | 5.568000 | 6.76000 | 7.100 | 6.308255 | 7.460140 | 6.33 | 6.358333 | 6.616667 | 6.062037 |
2014 | 6.522222 | 4.963830 | 5.616667 | 7.120000 | 7.175000 | 6.596250 | 5.921739 | 6.374194 | 7.250000 | 6.86 | ... | 7.060000 | 5.653571 | 6.56875 | 6.960 | 6.393056 | 7.253398 | 7.30 | 6.868750 | 7.150000 | 5.650833 |
2015 | 6.576000 | 4.969189 | 5.589189 | 7.166667 | 7.342857 | 6.732727 | 6.018750 | 6.736364 | 6.500000 | 6.76 | ... | 6.300000 | 5.846667 | 6.88000 | 7.625 | 6.231486 | 7.123256 | 6.70 | 6.514286 | 7.233333 | 5.423853 |
2016 | NaN | 4.712000 | 5.390909 | 7.000000 | NaN | 6.833333 | 6.200000 | 6.900000 | NaN | NaN | ... | NaN | NaN | NaN | NaN | 6.522581 | 7.200000 | NaN | NaN | NaN | 5.730000 |
2018 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | 6.935704 | NaN | NaN | NaN | NaN | NaN |
127 rows × 25 columns
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精度。
df["评分等级"] = pd.cut(df["评分"], [0,3,5,7,9,10], labels = ['E','D','C','B','A']) #labels要和区间划分一一对应
df
年代 | 产地 | 名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | 评分等级 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 1994 | 美国 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 1994-09-10 00:00:00 | 142 | 9.600000 | 多伦多电影节 | A |
1 | 1957 | 美国 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 1957-12-17 00:00:00 | 116 | 9.500000 | 美国 | A |
2 | 1997 | 意大利 | 美丽人生 | 327855 | 剧情/喜剧/爱情 | 1997-12-20 00:00:00 | 116 | 9.500000 | 意大利 | A |
3 | 1994 | 美国 | 阿甘正传 | 580897 | 剧情/爱情 | 1994-06-23 00:00:00 | 142 | 9.400000 | 洛杉矶首映 | A |
4 | 1993 | 中国大陆 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 1993-01-01 00:00:00 | 171 | 9.400000 | 香港 | A |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
38158 | 1935 | 美国 | 1935年 | 57 | 喜剧/歌舞 | 1935-03-15 00:00:00 | 98 | 7.600000 | 美国 | B |
38159 | 1986 | 中国大陆 | 血溅画屏 | 95 | 剧情/悬疑/犯罪/武侠/古装 | 1905-06-08 00:00:00 | 91 | 7.100000 | 美国 | B |
38160 | 1986 | 中国大陆 | 魔窟中的幻想 | 51 | 惊悚/恐怖/儿童 | 1905-06-08 00:00:00 | 78 | 8.000000 | 美国 | B |
38161 | 1977 | 俄罗斯 | 列宁格勒围困之星火战役 Блокада: Фильм 2: Ленинградский ме... | 32 | 剧情/战争 | 1905-05-30 00:00:00 | 97 | 6.600000 | 美国 | C |
38162 | 2018 | 美国 | 复仇者联盟3 | 123456 | 剧情/科幻 | 2018-05-04 00:00:00 | 142 | 6.935704 | 美国 | C |
38163 rows × 10 columns
同样的,我们可以根据投票人数来刻画电影的热门
投票越多的热门程度越高
bins = np.percentile(df["投票人数"], [0,20,40,60,80,100]) #获取分位数
df["热门程度"] = pd.cut(df["投票人数"],bins,labels = ['E','D','C','B','A'])
df[:5]
年代 | 产地 | 名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | 评分等级 | 热门程度 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1994 | 美国 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 1994-09-10 00:00:00 | 142 | 9.6 | 多伦多电影节 | A | A |
1 | 1957 | 美国 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 1957-12-17 00:00:00 | 116 | 9.5 | 美国 | A | A |
2 | 1997 | 意大利 | 美丽人生 | 327855 | 剧情/喜剧/爱情 | 1997-12-20 00:00:00 | 116 | 9.5 | 意大利 | A | A |
3 | 1994 | 美国 | 阿甘正传 | 580897 | 剧情/爱情 | 1994-06-23 00:00:00 | 142 | 9.4 | 洛杉矶首映 | A | A |
4 | 1993 | 中国大陆 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 1993-01-01 00:00:00 | 171 | 9.4 | 香港 | A | A |
大烂片集合:投票人数很多,评分很低
遗憾的是,我们可以发现,烂片几乎都是中国大陆的
df[(df.热门程度 == 'A') & (df.评分等级 == 'E')]
年代 | 产地 | 名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | 评分等级 | 热门程度 | |
---|---|---|---|---|---|---|---|---|---|---|---|
623 | 2011 | 中国大陆 | B区 | 5187 | 剧情/惊悚/恐怖 | 2011-06-03 00:00:00 | 89 | 2.3 | 中国大陆 | E | A |
4167 | 2014 | 中国大陆 | 怖偶 | 4867 | 悬疑/惊悚 | 2014-05-07 00:00:00 | 88 | 2.8 | 中国大陆 | E | A |
5200 | 2011 | 中国大陆 | 床下有人 | 4309 | 悬疑/惊悚 | 2011-10-14 00:00:00 | 100 | 2.8 | 中国大陆 | E | A |
6585 | 2013 | 中国大陆 | 帝国秘符 | 4351 | 动作/冒险 | 2013-09-18 00:00:00 | 93 | 3.0 | 中国大陆 | E | A |
8009 | 2011 | 中国大陆 | 飞天 | 4764 | 剧情 | 2011-07-01 00:00:00 | 115 | 2.9 | 中国大陆 | E | A |
8181 | 2014 | 中国大陆 | 分手达人 | 3937 | 喜剧/爱情 | 2014-06-06 00:00:00 | 90 | 2.7 | 中国大陆 | E | A |
9372 | 2012 | 中国大陆 | 孤岛惊魂 | 2982 | 悬疑/惊悚/恐怖 | 2013-01-26 00:00:00 | 93 | 2.8 | 中国大陆 | E | A |
10275 | 2013 | 中国大陆 | 海天盛宴·韦口 | 3788 | 情色 | 2013-10-12 00:00:00 | 88 | 2.9 | 网络 | E | A |
16512 | 2013 | 中国大陆 | 孪生密码 | 6390 | 动作/悬疑 | 2013-11-08 00:00:00 | 96 | 2.9 | 中国大陆 | E | A |
21189 | 2010 | 日本 | 拳皇 | 6329 | 动作/科幻/冒险 | 2012-10-12 00:00:00 | 93 | 3.0 | 中国大陆 | E | A |
22348 | 2013 | 中国大陆 | 闪魂 | 3119 | 惊悚/犯罪 | 2014-02-21 00:00:00 | 94 | 2.6 | 中国大陆 | E | A |
22524 | 2015 | 中国大陆 | 少年毛泽东 | 3058 | 动画/儿童/冒险 | 2015-04-30 00:00:00 | 76 | 2.4 | 中国大陆 | E | A |
23754 | 2013 | 英国 | 史前怪兽 | 3543 | 动作/惊悚/冒险 | 2014-01-01 00:00:00 | 89 | 3.0 | 中国大陆 | E | A |
27832 | 2011 | 中国大陆 | 无极限之危情速递 | 6319 | 喜剧/动作/爱情/冒险 | 2011-08-12 00:00:00 | 94 | 2.8 | 中国大陆 | E | A |
31622 | 2010 | 中国大陆 | 异度公寓 | 3639 | 惊悚 | 2010-06-04 00:00:00 | 93 | 2.7 | 中国大陆 | E | A |
32007 | 2014 | 中国大陆 | 英雄之战 | 8359 | 动作/爱情 | 2014-03-21 00:00:00 | 90 | 3.0 | 中国大陆 | E | A |
32180 | 2013 | 中国大陆 | 咏春小龙 | 8861 | 剧情/动作 | 2013-07-20 00:00:00 | 90 | 3.0 | 中国大陆 | E | A |
32990 | 2014 | 中国大陆 | 再爱一次好不好 | 6999 | 喜剧/爱情 | 2014-04-11 00:00:00 | 94 | 3.0 | 中国大陆 | E | A |
38090 | 2014 | 中国大陆 | 大话天仙 | 21629 | 喜剧/奇幻/古装 | 2014-02-02 00:00:00 | 91 | 3.0 | 中国大陆 | E | A |
38092 | 2013 | 中国大陆 | 天机·富春山居图 | 74709 | 动作/冒险 | 2013-06-09 00:00:00 | 122 | 2.9 | 中国大陆 | E | A |
38093 | 2014 | 中国大陆 | 特工艾米拉 | 10852 | 动作/悬疑 | 2014-04-11 00:00:00 | 96 | 2.7 | 中国大陆 | E | A |
38097 | 2015 | 中国大陆 | 汽车人总动员 | 12892 | 喜剧/动画/冒险 | 2015-07-03 00:00:00 | 85 | 2.3 | 中国大陆 | E | A |
38102 | 2016 | 中国大陆 | 2016年中央电视台春节 | 17328 | 歌舞/真人秀 | 2016-02-07 00:00:00 | 280 | 2.3 | 中国大陆 | E | A |
38108 | 2014 | 中国大陆 | 放手爱 | 29254 | 喜剧/爱情 | 2014-04-30 00:00:00 | 93 | 2.3 | 中国大陆 | E | A |
冷门高分电影
df[(df.热门程度 == 'E') & (df.评分等级 == 'A')]
年代 | 产地 | 名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | 评分等级 | 热门程度 | |
---|---|---|---|---|---|---|---|---|---|---|---|
563 | 2011 | 英国 | BBC喜剧音 | 38 | 喜剧/音乐/歌舞 | 2011-08-13 00:00:00 | 95 | 9.3 | 美国 | A | E |
895 | 2014 | 日本 | JOJO的奇妙冒险 特别见面会 Walk Like Crusade | 36 | 纪录片 | 2014-10-26 00:00:00 | 137 | 9.3 | 美国 | A | E |
1099 | 2012 | 英国 | Pond一家最 | 45 | 纪录片 | 2012-09-29 00:00:00 | 12 | 9.2 | 美国 | A | E |
1540 | 2007 | 英国 | 阿森纳:温格的十一人 | 74 | 运动 | 2007-10-22 00:00:00 | 78 | 9.5 | 美国 | A | E |
1547 | 2009 | 英国 | 阿斯加德远征 | 59 | 纪录片 | 2011-09-17 00:00:00 | 85 | 9.3 | 美国 | A | E |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
36846 | 2012 | 中国大陆 | 末了,未了 | 34 | 剧情/喜剧/爱情 | 2012-12-16 00:00:00 | 90 | 9.5 | 美国 | A | E |
37000 | 2015 | 中国大陆 | 身经百战 | 74 | 纪录片 | 2015-03-24 00:00:00 | 91 | 9.1 | 美国 | A | E |
37033 | 1986 | 英国 | 歌唱神探 | 36 | 剧情/悬疑/歌舞 | 1986-11-16 00:00:00 | 415 | 9.1 | 美国 | A | E |
37557 | 1975 | 美国 | 山那边 | 70 | 剧情 | 1975-11-14 00:00:00 | 103 | 9.1 | 美国 | A | E |
37883 | 2015 | 美国 | 奎 | 62 | 纪录片/短片 | 2015-08-19 00:00:00 | 9 | 9.1 | 纽约电影论坛 | A | E |
177 rows × 11 columns
将处理后的数据进行保存
df.to_excel("movie_data3.xlsx")
3.4 合并数据集
( 1 )append
先把数据集拆分为多个,再进行合并
df_usa = df[df.产地 == "美国"]
df_china = df[df.产地 == "中国大陆"]
df_china._append(df_usa) #直接追加到后面,最好是变量相同的
年代 | 产地 | 名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | 评分等级 | 热门程度 | |
---|---|---|---|---|---|---|---|---|---|---|---|
4 | 1993 | 中国大陆 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 1993-01-01 00:00:00 | 171 | 9.400000 | 香港 | A | A |
21 | 1961 | 中国大陆 | 大闹天宫 | 74881 | 动画/奇幻 | 1905-05-14 00:00:00 | 114 | 9.200000 | 上集 | A | A |
29 | 2015 | 中国大陆 | 穹顶之下 | 51113 | 纪录片 | 2015-02-28 00:00:00 | 104 | 9.200000 | 中国大陆 | A | A |
38 | 1982 | 中国大陆 | 茶馆 | 10678 | 剧情/历史 | 1905-06-04 00:00:00 | 118 | 9.200000 | 美国 | A | A |
45 | 1988 | 中国大陆 | 山水情 | 10781 | 动画/短片 | 1905-06-10 00:00:00 | 19 | 9.200000 | 美国 | A | A |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
38151 | 1987 | 美国 | 零下的激情 | 199 | 剧情/爱情/犯罪 | 1987-11-06 00:00:00 | 98 | 7.400000 | 美国 | B | D |
38153 | 1986 | 美国 | 离别秋波 | 240 | 剧情/爱情/音乐 | 1986-02-19 00:00:00 | 90 | 8.200000 | 美国 | B | C |
38156 | 1986 | 美国 | 极乐森林 | 45 | 纪录片 | 1986-09-14 00:00:00 | 90 | 8.100000 | 美国 | B | E |
38158 | 1935 | 美国 | 1935年 | 57 | 喜剧/歌舞 | 1935-03-15 00:00:00 | 98 | 7.600000 | 美国 | B | E |
38162 | 2018 | 美国 | 复仇者联盟3 | 123456 | 剧情/科幻 | 2018-05-04 00:00:00 | 142 | 6.935704 | 美国 | C | A |
15505 rows × 11 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, validate=None)
left:DataFrame对象
right:DataFrame或Series(要合并的对象)
how:{‘left’, ‘right’, ‘outer’, ‘inner’},默认’inner’
(要执行的合并类型)
- left:只使用左框架中的键,类似于SQL的左外连接;
保留键顺序。 - right:只使用右框架中的键,类似于SQL的右外连接;
保留键顺序。 - outer:使用来自两个帧的键的联合,类似于SQL的完整外层加入;
按字典顺序排序键。 - inner:使用两个帧的键的交集,类似于SQL inner加入;
保持左键的顺序。
on:label或list
要连接的列或索引级别名称。这些必须在两者中找到DataFrames。如果’ on '为None并且不合并索引,则默认为到两个dataframe中列的交点。
left_on:label或list,或array-like
在左DataFrame中要连接的列或索引级别名称。也可以是左DataFrame长度的数组或数组列表。这些数组被视为列。
right_on:label或list,或array-like
要在正确的DataFrame中连接的列或索引级别名称。也可以是与DataFrame长度相同的数组或数组列表。这些数组被视为列。
left_index: bool,默认为False
使用左侧DataFrame中的索引作为连接键。如果它是MultiIndex,另一个DataFrame(或者索引)中的键数(或列数)必须与层数相匹配。
right_index: bool,默认为False
使用来自右侧DataFrame的索引作为连接键。同样的警告left_index。
sort: bool,默认为False
在结果DataFrame中按字典顺序排序连接键。如果错误,连接键的顺序取决于连接类型(how关键字)。
suffixes:tuple of (str, str), 默认值为 (‘_x’, ‘_y’)
应用于左侧和右侧重叠的列名
copy: bool,默认为True
如果为False,尽可能避免复制。
indicator: bool或str,默认为False
如果为True,则在输出DataFrame中添加一个名为“_merge”的列
每行来源的信息。
如果是字符串,则包含每行来源信息的列将被添加到
输出DataFrame,列将被命名为字符串的值。
信息列是分类类型的,其值为“left_only”
对于合并键只出现在’left DataFrame’的观测值,
'right_only’用于合并键只出现在right中的观测值
如果观测值的合并键在两者中都存在,则使用both。
Validate: str,可选
如果指定,则检查merge是否为指定类型。
- “one_to_one"或"1:1”:检查合并键在两者中是否唯一
left and right datasets - “one_to_many"或"1:m”:检查合并键在左侧是否唯一
dataset - “many_to_one"或"m:1”:检查合并键是否唯一
dataset - “many_to_many"或"m:m”:允许,但不检查。
我们选取6部热门电影
df1 = df.loc[:5]
df1
年代 | 产地 | 名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | 评分等级 | 热门程度 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1994 | 美国 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 1994-09-10 00:00:00 | 142 | 9.6 | 多伦多电影节 | A | A |
1 | 1957 | 美国 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 1957-12-17 00:00:00 | 116 | 9.5 | 美国 | A | A |
2 | 1997 | 意大利 | 美丽人生 | 327855 | 剧情/喜剧/爱情 | 1997-12-20 00:00:00 | 116 | 9.5 | 意大利 | A | A |
3 | 1994 | 美国 | 阿甘正传 | 580897 | 剧情/爱情 | 1994-06-23 00:00:00 | 142 | 9.4 | 洛杉矶首映 | A | A |
4 | 1993 | 中国大陆 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 1993-01-01 00:00:00 | 171 | 9.4 | 香港 | A | A |
5 | 2012 | 美国 | 泰坦尼克号 | 157074 | 剧情/爱情/灾难 | 2012-04-10 00:00:00 | 194 | 9.4 | 中国大陆 | A | A |
df2 = df.loc[:5][["名字","产地"]]
df2["票房"] = [123344,23454,55556,333,6666,444]
df2
名字 | 产地 | 票房 | |
---|---|---|---|
0 | 肖申克的救赎 | 美国 | 123344 |
1 | 控方证人 | 美国 | 23454 |
2 | 美丽人生 | 意大利 | 55556 |
3 | 阿甘正传 | 美国 | 333 |
4 | 霸王别姬 | 中国大陆 | 6666 |
5 | 泰坦尼克号 | 美国 | 444 |
df2 = df2.sample(frac = 1) #打乱数据
df2.index = range(len(df2))
df2
名字 | 产地 | 票房 | |
---|---|---|---|
0 | 肖申克的救赎 | 美国 | 123344 |
1 | 霸王别姬 | 中国大陆 | 6666 |
2 | 控方证人 | 美国 | 23454 |
3 | 美丽人生 | 意大利 | 55556 |
4 | 阿甘正传 | 美国 | 333 |
5 | 泰坦尼克号 | 美国 | 444 |
现在,我们需要把df1和df2合并
我们发现,df2有票房数据,df1有评分等其他信息
由于样本的顺序不一致,因此不能直接采取直接复制的方法
pd.merge(df1, df2, how = "inner", on = "名字")
年代 | 产地_x | 名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | 评分等级 | 热门程度 | 产地_y | 票房 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1994 | 美国 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 1994-09-10 00:00:00 | 142 | 9.6 | 多伦多电影节 | A | A | 美国 | 123344 |
1 | 1957 | 美国 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 1957-12-17 00:00:00 | 116 | 9.5 | 美国 | A | A | 美国 | 23454 |
2 | 1997 | 意大利 | 美丽人生 | 327855 | 剧情/喜剧/爱情 | 1997-12-20 00:00:00 | 116 | 9.5 | 意大利 | A | A | 意大利 | 55556 |
3 | 1994 | 美国 | 阿甘正传 | 580897 | 剧情/爱情 | 1994-06-23 00:00:00 | 142 | 9.4 | 洛杉矶首映 | A | A | 美国 | 333 |
4 | 1993 | 中国大陆 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 1993-01-01 00:00:00 | 171 | 9.4 | 香港 | A | A | 中国大陆 | 6666 |
5 | 2012 | 美国 | 泰坦尼克号 | 157074 | 剧情/爱情/灾难 | 2012-04-10 00:00:00 | 194 | 9.4 | 中国大陆 | A | A | 美国 | 444 |
由于两个数据集都存在产地,因此合并后会有两个产地信息
( 3 )concat
将多个数据集进行批量合并
df1 = df[:10]
df2 = df[100:110]
df3 = df[200:210]
dff = pd.concat([df1,df2,df3],axis = 0) #默认axis = 0,列拼接需要修改为1
dff
年代 | 产地 | 名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | 评分等级 | 热门程度 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1994 | 美国 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 1994-09-10 00:00:00 | 142 | 9.6 | 多伦多电影节 | A | A |
1 | 1957 | 美国 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 1957-12-17 00:00:00 | 116 | 9.5 | 美国 | A | A |
2 | 1997 | 意大利 | 美丽人生 | 327855 | 剧情/喜剧/爱情 | 1997-12-20 00:00:00 | 116 | 9.5 | 意大利 | A | A |
3 | 1994 | 美国 | 阿甘正传 | 580897 | 剧情/爱情 | 1994-06-23 00:00:00 | 142 | 9.4 | 洛杉矶首映 | A | A |
4 | 1993 | 中国大陆 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 1993-01-01 00:00:00 | 171 | 9.4 | 香港 | A | A |
5 | 2012 | 美国 | 泰坦尼克号 | 157074 | 剧情/爱情/灾难 | 2012-04-10 00:00:00 | 194 | 9.4 | 中国大陆 | A | A |
6 | 1993 | 美国 | 辛德勒的名单 | 306904 | 剧情/历史/战争 | 1993-11-30 00:00:00 | 195 | 9.4 | 华盛顿首映 | A | A |
7 | 1997 | 日本 | 新世纪福音战士剧场版:Air/真心为你 新世紀エヴァンゲリオン劇場版 Ai | 24355 | 剧情/动作/科幻/动画/奇幻 | 1997-07-19 00:00:00 | 87 | 9.4 | 日本 | A | A |
8 | 2013 | 日本 | 银魂完结篇:直到永远的万事屋 劇場版 銀魂 完結篇 万事屋よ | 21513 | 剧情/动画 | 2013-07-06 00:00:00 | 110 | 9.4 | 日本 | A | A |
9 | 1994 | 法国 | 这个杀手不太冷 | 662552 | 剧情/动作/犯罪 | 1994-09-14 00:00:00 | 133 | 9.4 | 法国 | A | A |
100 | 1993 | 韩国 | 101 | 146 | 喜剧/爱情 | 1993-06-19 00:00:00 | 112 | 7.4 | 韩国 | B | D |
101 | 1995 | 英国 | 10 | 186 | 喜剧 | 1995-01-25 00:00:00 | 101 | 7.4 | 美国 | B | D |
102 | 2013 | 韩国 | 素媛 | 114819 | 剧情/家庭 | 2013-10-02 00:00:00 | 123 | 9.1 | 韩国 | A | A |
103 | 2003 | 美国 | 101忠狗续集:伦敦 | 924 | 喜剧/动画/家庭 | 2003-01-21 00:00:00 | 70 | 7.5 | 美国 | B | B |
104 | 2000 | 美国 | 10 | 9514 | 喜剧/家庭 | 2000-09-22 00:00:00 | 100 | 7.0 | 美国 | C | A |
105 | 2013 | 韩国 | 10 | 601 | 剧情 | 2014-04-24 00:00:00 | 93 | 7.2 | 美国 | B | C |
106 | 2006 | 美国 | 10件或 | 1770 | 剧情/喜剧/爱情 | 2006-12-01 00:00:00 | 82 | 7.7 | 美国 | B | B |
107 | 2014 | 美国 | 10年 | 1531 | 喜剧/同性 | 2015-06-02 00:00:00 | 90 | 6.9 | 美国 | C | B |
108 | 2012 | 日本 | 11·25自决之日 三岛由纪夫与年轻人们 11・25自決の | 149 | 剧情 | 2012-06-02 00:00:00 | 119 | 5.6 | 日本 | C | D |
109 | 1997 | 美国 | 泰坦尼克号 | 535491 | 剧情/爱情/灾难 | 1998-04-03 00:00:00 | 194 | 9.1 | 中国大陆 | A | A |
200 | 2014 | 日本 | 最完美的离婚 2014特别篇 | 18478 | 剧情/喜剧/爱情 | 2014-02-08 00:00:00 | 120 | 9.1 | 日本 | A | A |
201 | 2009 | 日本 | 2001夜物 | 84 | 剧情/动画 | 2009-10-02 00:00:00 | 80 | 6.6 | 美国 | C | D |
202 | 2009 | 中国香港 | 头七 頭 | 7039 | 恐怖 | 2009-05-21 00:00:00 | 60 | 6.2 | 美国 | C | A |
203 | 1896 | 法国 | 火车进站 L | 7001 | 纪录片/短片 | 1896-01-06 | 60 | 8.8 | 法国 | B | A |
204 | 2009 | 美国 | 银行舞蹈 | 6944 | 短片 | 1905-07-01 00:00:00 | 60 | 7.8 | 美国 | B | A |
205 | 2003 | 荷兰 | 2003提雅 | 48 | 音乐 | 2003-10-07 00:00:00 | 200 | 8.9 | 美国 | B | E |
206 | 2012 | 美国 | 死亡飞车3:地狱烈 | 6937 | 动作 | 2012-12-12 00:00:00 | 60 | 5.8 | 美国 | C | A |
207 | 2012 | 日本 | 时光钟摆 振り | 6876 | 剧情/动画/短片 | 2012-03-20 00:00:00 | 60 | 8.7 | 美国 | B | A |
208 | 2011 | 中国香港 | 你还可爱么 你還可愛 | 6805 | 短片 | 2011-04-22 00:00:00 | 60 | 8.3 | 美国 | B | A |
209 | 2002 | 中国香港 | 一碌蔗 | 6799 | 剧情/喜剧/爱情 | 2002-09-19 00:00:00 | 60 | 6.7 | 美国 | C | A |