pandas入门(3)
Pandas入门(3)
文章目录
- Pandas入门(3)
- 一.数据重塑和轴向旋转
- 1.层次化索引
- ①Series的层次化索引
- ②通过unstack方法将Series变成一个DataFrame
- ③DataFrame的层次化索引
- ④将豆瓣电影数据处理成多索引结构
- 2.轴向旋转
- 二.数据分组,分组运算
- Groupby技术:实现数据的分组和分组运算,作用类似于数据透视表
- 按照电影产地进行分组
- 先定义一个分组变量
- 计算分组后的各个统计量
- 计算每年的平均评分
- 计算每个产地的电影的平均得分
- 前面的对各个数值型变量求均值,但其实对年代求平均值没啥意义,可以先将年代转为字符串
- 传入多个分组变量
- 获得每个地区,每一年电影的评分的均值
- series通过unstack方法转化为dataframe,会产生缺失值
- 三.离散化处理
- 1.cut函数进行离散化
- 比如,我们可以把评分9分及以上的电影定义为A,7到9分定义为B,5到7分定义为c,3到5分定义为D,小于3分定义为E
- 新增一列评分等级
- 可以根据投票人数来刻画电影热门程度
- 烂片统计:评分人数多,分数低
- 冷门高分电影
- 2.保存处理后的数据
- 四.合并数据集
- 1.append
- 先把数据集拆分为多个,再进行合并
- 将这两个数据集进行合并
- 2.merge(最常用)
- 3.concat
准备工作
导入包
import pandas as pd
import numpy as np
读入数据
df=pd.read_excel("movie_data2.xlsx")
df.head()
名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|---|---|
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 | 香港 |
一.数据重塑和轴向旋转
1.层次化索引
层次化索引能使我们在一个轴上拥有多个索引
①Series的层次化索引
来看一个两层索引
s = pd.Series(np.arange(1, 11), index=[['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'],['①', '②', '③', '④', '⑤', '①', '②', '③', '①', '②']])
s
运行结果
:
a ① 1② 2③ 3④ 4⑤ 5
b ① 6② 7③ 8
c ① 9② 10
dtype: int32
s.index
运行结果
:
MultiIndex([('a', '①'),('a', '②'),('a', '③'),('a', '④'),('a', '⑤'),('b', '①'),('b', '②'),('b', '③'),('c', '①'),('c', '②')],)
对外层索引进行操作
s['a']
运行结果
:
① 1
② 2
③ 3
④ 4
⑤ 5
dtype: int32
#切片
s['a':'b']
#和原生切片不一样,两边都是闭
运行结果
:
a ① 1② 2③ 3④ 4⑤ 5
b ① 6② 7③ 8
dtype: int32
对内层操作
#逗号前面表示外层索引,冒号两边没东西那就是全取
s[:,'①']
#取出来了('a', '①'),('b', '①'),('c', '①')的值
运行结果
:
a 1
b 6
c 9
dtype: int32
取具体的值
s['c','②']
运行结果
:
10
②通过unstack方法将Series变成一个DataFrame
例如:
s.unstack()
运行结果
:
① | ② | ③ | ④ | ⑤ | |
---|---|---|---|---|---|
a | 1.0 | 2.0 | 3.0 | 4.0 | 5.0 |
b | 6.0 | 7.0 | 8.0 | NaN | NaN |
c | 9.0 | 10.0 | NaN | NaN | NaN |
s.unstack().stack()
运行结果
:
a ① 1.0② 2.0③ 3.0④ 4.0⑤ 5.0
b ① 6.0② 7.0③ 8.0
c ① 9.0② 10.0
dtype: float64
#stack堆叠:将列转到行, unstack为反操作:行转到列
s.unstack().stack().unstack()
运行结果
:
① | ② | ③ | ④ | ⑤ | |
---|---|---|---|---|---|
a | 1.0 | 2.0 | 3.0 | 4.0 | 5.0 |
b | 6.0 | 7.0 | 8.0 | NaN | NaN |
c | 9.0 | 10.0 | NaN | NaN | NaN |
③DataFrame的层次化索引
DataFrame的行和列都可以层次化索引
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 |
行的层次化,增加index参数
data2 = pd.DataFrame(np.arange(12).reshape(4, 3),index=[['一','二','二','二'],['a','a','b','c']])
data2
#默认索引是数字
0 | 1 | 2 | ||
---|---|---|---|---|
一 | a | 0 | 1 | 2 |
二 | a | 3 | 4 | 5 |
b | 6 | 7 | 8 | |
c | 9 | 10 | 11 |
列的层次化,增加columns参数
data3 = pd.DataFrame(np.arange(12).reshape(4, 3), index=[['一', '二', '二', '二'], ['a', 'a', 'b', 'c']],columns=[['(1)','(1)','(2)'],['Ⅰ','Ⅰ','Ⅱ']])
data3
#默认索引是数字
(1) | (2) | |||
---|---|---|---|---|
Ⅰ | Ⅰ | Ⅱ | ||
一 | a | 0 | 1 | 2 |
二 | a | 3 | 4 | 5 |
b | 6 | 7 | 8 | |
c | 9 | 10 | 11 |
注意像上面那样写(1)的话,要加单引号,否则会被认为是只有一个数字的元组(只有一个数字没有逗号的元组就是数字本身)
选取列
data3['(1)']
Ⅰ | Ⅰ | ||
---|---|---|---|
一 | a | 0 | 1 |
二 | a | 3 | 4 |
b | 6 | 7 | |
c | 9 | 10 |
给行索引设定名称
data3.index.names=['row1','row2']
data3
(1) | (2) | |||
---|---|---|---|---|
Ⅰ | Ⅰ | Ⅱ | ||
row1 | row2 | |||
一 | a | 0 | 1 | 2 |
二 | a | 3 | 4 | 5 |
b | 6 | 7 | 8 | |
c | 9 | 10 | 11 |
给列索引设定名称
data3.columns.names=['col1','col2']
data3
col1 | (1) | (2) | ||
---|---|---|---|---|
col2 | Ⅰ | Ⅰ | Ⅱ | |
row1 | row2 | |||
一 | a | 0 | 1 | 2 |
二 | a | 3 | 4 | 5 |
b | 6 | 7 | 8 | |
c | 9 | 10 | 11 |
调整行索引的顺序
data3.swaplevel('row1','row2')
col1 | (1) | (2) | ||
---|---|---|---|---|
col2 | Ⅰ | Ⅰ | Ⅱ | |
row2 | row1 | |||
a | 一 | 0 | 1 | 2 |
二 | 3 | 4 | 5 | |
b | 二 | 6 | 7 | 8 |
c | 二 | 9 | 10 | 11 |
④将豆瓣电影数据处理成多索引结构
df.index
运行结果
:
RangeIndex(start=0, stop=38722, step=1)
set_index可以把列变成索引, reset_index可以把索引变成列
将产地作为外索引,年代作为内索引
df2=df.set_index(['产地','年代'])
df2
名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | ||
---|---|---|---|---|---|---|---|---|
产地 | 年代 | |||||||
美国 | 1994 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 1994-09-10 00:00:00 | 142 | 9.6 | 多伦多电影节 |
1957 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 1957-12-17 00:00:00 | 116 | 9.5 | 美国 | |
意大利 | 1997 | 美丽人生 | 327855 | 剧情/喜剧/爱情 | 1997-12-20 00:00:00 | 116 | 9.5 | 意大利 |
美国 | 1994 | 阿甘正传 | 580897 | 剧情/爱情 | 1994-06-23 00:00:00 | 142 | 9.4 | 洛杉矶首映 |
中国大陆 | 1993 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 1993-01-01 00:00:00 | 171 | 9.4 | 香港 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
法国 | 1983 | 神学院 S | 46 | Adult | 1905-06-05 00:00:00 | 58 | 8.6 | 美国 |
美国 | 1935 | 1935年 | 57 | 喜剧/歌舞 | 1935-03-15 00:00:00 | 98 | 7.6 | 美国 |
中国大陆 | 1986 | 血溅画屏 | 95 | 剧情/悬疑/犯罪/武侠/古装 | 1905-06-08 00:00:00 | 91 | 7.1 | 美国 |
1986 | 魔窟中的幻想 | 51 | 惊悚/恐怖/儿童 | 1905-06-08 00:00:00 | 78 | 8.0 | 美国 | |
俄罗斯 | 1977 | 列宁格勒围困之星火战役 Блокада: Фильм 2: Ленинградский ме... | 32 | 剧情/战争 | 1905-05-30 00:00:00 | 97 | 6.6 | 美国 |
38722 rows × 7 columns
这样的情况下,每一个索引都是一个元组
df2.index[0]
运行结果
:
('美国', 1994)
df2.index[1]
运行结果
:
('美国', 1957)
若要获取所有的美国电影信息,此时产地已经变成了索引,要用.loc()
.loc根据行标签获取行数据,下面会获得以年代为索引的dataframe
df2.loc['美国']
名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|
年代 | |||||||
1994 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 1994-09-10 00:00:00 | 142 | 9.6 | 多伦多电影节 |
1957 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 1957-12-17 00:00:00 | 116 | 9.5 | 美国 |
1994 | 阿甘正传 | 580897 | 剧情/爱情 | 1994-06-23 00:00:00 | 142 | 9.4 | 洛杉矶首映 |
2012 | 泰坦尼克号 | 157074 | 剧情/爱情/灾难 | 2012-04-10 00:00:00 | 194 | 9.4 | 中国大陆 |
1993 | 辛德勒的名单 | 306904 | 剧情/历史/战争 | 1993-11-30 00:00:00 | 195 | 9.4 | 华盛顿首映 |
... | ... | ... | ... | ... | ... | ... | ... |
1987 | 跷家的一夜 | 82 | 喜剧/动作/惊悚/冒险 | 1987-07-01 00:00:00 | 102 | 7.8 | 美国 |
1987 | 零下的激情 | 199 | 剧情/爱情/犯罪 | 1987-11-06 00:00:00 | 98 | 7.4 | 美国 |
1986 | 离别秋波 | 240 | 剧情/爱情/音乐 | 1986-02-19 00:00:00 | 90 | 8.2 | 美国 |
1986 | 极乐森林 | 45 | 纪录片 | 1986-09-14 00:00:00 | 90 | 8.1 | 美国 |
1935 | 1935年 | 57 | 喜剧/歌舞 | 1935-03-15 00:00:00 | 98 | 7.6 | 美国 |
11976 rows × 7 columns
df2.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 | 美国 |
3802 rows × 7 columns
调整行索引的顺序
df2=df2.swaplevel('产地','年代')
df2.head()
名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | ||
---|---|---|---|---|---|---|---|---|
年代 | 产地 | |||||||
1994 | 美国 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 1994-09-10 00:00:00 | 142 | 9.6 | 多伦多电影节 |
1957 | 美国 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 1957-12-17 00:00:00 | 116 | 9.5 | 美国 |
1997 | 意大利 | 美丽人生 | 327855 | 剧情/喜剧/爱情 | 1997-12-20 00:00:00 | 116 | 9.5 | 意大利 |
1994 | 美国 | 阿甘正传 | 580897 | 剧情/爱情 | 1994-06-23 00:00:00 | 142 | 9.4 | 洛杉矶首映 |
1993 | 中国大陆 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 1993-01-01 00:00:00 | 171 | 9.4 | 香港 |
df2.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 | 美国 |
494 rows × 7 columns
若要取消层次化索引
df2 = df2.reset_index()
df2.head()
运行结果
:
年代 | 产地 | 名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|---|---|
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.轴向旋转
取前五行电影数据为例子
Data=df2[: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 | 142 | 9.6 | 多伦多电影节 |
1 | 1957 | 美国 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 1957-12-17 | 116 | 9.5 | 美国 |
2 | 1997 | 意大利 | 美丽人生 | 327855 | 剧情/喜剧/爱情 | 1997-12-20 | 116 | 9.5 | 意大利 |
3 | 1994 | 美国 | 阿甘正传 | 580897 | 剧情/爱情 | 1994-06-23 | 142 | 9.4 | 洛杉矶首映 |
4 | 1993 | 中国大陆 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 1993-01-01 | 171 | 9.4 | 香港 |
二.数据分组,分组运算
Groupby技术:实现数据的分组和分组运算,作用类似于数据透视表
按照电影产地进行分组
先定义一个分组变量
group=df.groupby(df['产地'])
#GroupBy对象
print(group)
print(type(group))
运行结果
:
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x00000214044DE2E0>
<class 'pandas.core.groupby.generic.DataFrameGroupBy'>
计算分组后的各个统计量
#计算各个组别的数值型数据的平均值
group.mean()
投票人数 | 时长 | 年代 | 评分 | |
---|---|---|---|---|
产地 | ||||
中国台湾 | 8474.864078 | 87.257282 | 1999.009709 | 7.066667 |
中国大陆 | 10898.293793 | 81.432930 | 2004.599684 | 6.064703 |
中国香港 | 8167.446159 | 88.541214 | 1991.100316 | 6.474114 |
丹麦 | 1993.858586 | 88.101010 | 1999.090909 | 7.245960 |
俄罗斯 | 1019.134172 | 95.918239 | 1984.899371 | 7.554507 |
其他 | 1591.494007 | 87.100573 | 1998.761334 | 7.237467 |
加拿大 | 1915.304288 | 80.109267 | 2002.461964 | 6.733610 |
印度 | 3210.843137 | 121.016807 | 2005.974790 | 6.872269 |
墨西哥 | 1173.218487 | 91.840336 | 1992.815126 | 7.087395 |
巴西 | 3536.000000 | 87.811881 | 1999.871287 | 7.262376 |
德国 | 2597.851744 | 92.062016 | 1996.062984 | 7.198062 |
意大利 | 3340.740988 | 104.008011 | 1985.503338 | 7.179306 |
日本 | 3565.876585 | 84.705428 | 1999.907092 | 7.194572 |
比利时 | 1230.122302 | 82.352518 | 1999.496403 | 7.217986 |
法国 | 3628.402842 | 89.901599 | 1991.757016 | 7.239432 |
波兰 | 881.640884 | 80.734807 | 1987.027624 | 7.441989 |
泰国 | 5322.724490 | 88.442177 | 2009.129252 | 6.109184 |
澳大利亚 | 4719.043333 | 85.163333 | 2002.986667 | 6.978000 |
瑞典 | 1510.817708 | 93.218750 | 1986.932292 | 7.413021 |
美国 | 8500.825234 | 89.347111 | 1994.573313 | 6.946685 |
英国 | 4797.089790 | 88.343592 | 1996.726647 | 7.526937 |
荷兰 | 934.425806 | 75.387097 | 2001.283871 | 7.190323 |
西班牙 | 3326.024609 | 90.503356 | 2001.588367 | 7.024385 |
阿根廷 | 2226.474138 | 91.706897 | 2004.034483 | 7.273276 |
韩国 | 6484.885270 | 99.729090 | 2008.119171 | 6.362990 |
计算每年的平均评分
df['评分'].groupby(df['年代']).mean()
运行结果
:
年代
1888 7.950000
1890 4.800000
1892 7.500000
1894 6.633333
1895 7.575000...
2012 6.457717
2013 6.392604
2014 6.259777
2015 6.142238
2016 5.868217
Name: 评分, Length: 126, dtype: float64
计算每个产地的电影的平均得分
df['评分'].groupby(df['产地']).mean()
运行结果
:
产地
中国台湾 7.066667
中国大陆 6.064703
中国香港 6.474114
丹麦 7.245960
俄罗斯 7.554507
其他 7.237467
加拿大 6.733610
印度 6.872269
墨西哥 7.087395
巴西 7.262376
德国 7.198062
意大利 7.179306
日本 7.194572
比利时 7.217986
法国 7.239432
波兰 7.441989
泰国 6.109184
澳大利亚 6.978000
瑞典 7.413021
美国 6.946685
英国 7.526937
荷兰 7.190323
西班牙 7.024385
阿根廷 7.273276
韩国 6.362990
Name: 评分, dtype: float64
前面的对各个数值型变量求均值,但其实对年代求平均值没啥意义,可以先将年代转为字符串
df['年代']=df['年代'].astype('str')
df.groupby(df['产地']).mean()
投票人数 | 时长 | 评分 | |
---|---|---|---|
产地 | |||
中国台湾 | 8474.864078 | 87.257282 | 7.066667 |
中国大陆 | 10898.293793 | 81.432930 | 6.064703 |
中国香港 | 8167.446159 | 88.541214 | 6.474114 |
丹麦 | 1993.858586 | 88.101010 | 7.245960 |
俄罗斯 | 1019.134172 | 95.918239 | 7.554507 |
其他 | 1591.494007 | 87.100573 | 7.237467 |
加拿大 | 1915.304288 | 80.109267 | 6.733610 |
印度 | 3210.843137 | 121.016807 | 6.872269 |
墨西哥 | 1173.218487 | 91.840336 | 7.087395 |
巴西 | 3536.000000 | 87.811881 | 7.262376 |
德国 | 2597.851744 | 92.062016 | 7.198062 |
意大利 | 3340.740988 | 104.008011 | 7.179306 |
日本 | 3565.876585 | 84.705428 | 7.194572 |
比利时 | 1230.122302 | 82.352518 | 7.217986 |
法国 | 3628.402842 | 89.901599 | 7.239432 |
波兰 | 881.640884 | 80.734807 | 7.441989 |
泰国 | 5322.724490 | 88.442177 | 6.109184 |
澳大利亚 | 4719.043333 | 85.163333 | 6.978000 |
瑞典 | 1510.817708 | 93.218750 | 7.413021 |
美国 | 8500.825234 | 89.347111 | 6.946685 |
英国 | 4797.089790 | 88.343592 | 7.526937 |
荷兰 | 934.425806 | 75.387097 | 7.190323 |
西班牙 | 3326.024609 | 90.503356 | 7.024385 |
阿根廷 | 2226.474138 | 91.706897 | 7.273276 |
韩国 | 6484.885270 | 99.729090 | 6.362990 |
这时候就不会对年代求平均了
#求中位数
df.groupby(df.产地).median()
投票人数 | 时长 | 评分 | |
---|---|---|---|
产地 | |||
中国台湾 | 487.0 | 92.0 | 7.1 |
中国大陆 | 501.5 | 90.0 | 6.4 |
中国香港 | 637.0 | 92.0 | 6.5 |
丹麦 | 181.5 | 93.5 | 7.3 |
俄罗斯 | 132.0 | 93.0 | 7.7 |
其他 | 154.0 | 90.0 | 7.4 |
加拿大 | 251.0 | 89.0 | 6.9 |
印度 | 138.0 | 131.0 | 7.0 |
墨西哥 | 174.0 | 93.0 | 7.2 |
巴西 | 126.0 | 96.0 | 7.3 |
德国 | 208.5 | 94.0 | 7.3 |
意大利 | 181.0 | 101.0 | 7.3 |
日本 | 355.5 | 89.0 | 7.3 |
比利时 | 226.0 | 90.0 | 7.3 |
法国 | 240.0 | 95.0 | 7.3 |
波兰 | 174.0 | 87.0 | 7.5 |
泰国 | 542.5 | 92.5 | 6.2 |
澳大利亚 | 303.5 | 94.0 | 7.0 |
瑞典 | 186.0 | 95.5 | 7.6 |
美国 | 392.0 | 93.0 | 7.1 |
英国 | 316.5 | 91.0 | 7.6 |
荷兰 | 175.0 | 84.0 | 7.3 |
西班牙 | 254.0 | 97.0 | 7.1 |
阿根廷 | 140.0 | 95.5 | 7.3 |
韩国 | 998.0 | 104.0 | 6.5 |
传入多个分组变量
df.groupby([df['产地'],df["年代"]]).mean()
投票人数 | 时长 | 评分 | ||
---|---|---|---|---|
产地 | 年代 | |||
中国台湾 | 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 | 5762.537736 | 100.669811 | 6.064151 |
2013 | 10189.036036 | 96.504505 | 6.098198 | |
2014 | 3776.266667 | 98.666667 | 5.650833 | |
2015 | 3209.247706 | 100.266055 | 5.423853 | |
2016 | 1739.850000 | 106.100000 | 5.730000 |
1584 rows × 3 columns
获得每个地区,每一年电影的评分的均值
means=df['评分'].groupby([df['产地'],df['年代']]).mean()
means
运行结果
:
产地 年代
中国台湾 1963 6.4000001965 6.8000001966 7.9000001967 8.0000001968 7.400000...
韩国 2012 6.0641512013 6.0981982014 5.6508332015 5.4238532016 5.730000
Name: 评分, Length: 1584, 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 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
2012 | 6.556098 | 5.727187 | 6.110526 | 7.418750 | 6.572727 | 6.591743 | 6.425000 | 6.502632 | 7.100000 | 7.32 | ... | 7.066667 | 5.962963 | 6.614286 | 5.9625 | 6.437622 | 7.293103 | 6.766667 | 6.595238 | 6.483333 | 6.064151 |
2013 | 7.076471 | 5.316667 | 6.105714 | 6.555556 | 6.875000 | 6.853571 | 6.018182 | 6.400000 | 6.983333 | 8.00 | ... | 6.966667 | 5.568000 | 6.760000 | 7.1000 | 6.339668 | 7.448322 | 6.563636 | 6.358333 | 6.616667 | 6.098198 |
2014 | 6.522222 | 4.963757 | 5.616667 | 7.120000 | 7.175000 | 6.596250 | 5.921739 | 6.374194 | 7.250000 | 6.86 | ... | 7.060000 | 5.653571 | 6.568750 | 6.9600 | 6.415922 | 7.275000 | 7.300000 | 6.868750 | 7.150000 | 5.650833 |
2015 | 6.576000 | 4.969189 | 5.589189 | 7.166667 | 7.342857 | 6.735714 | 6.018750 | 6.736364 | 6.500000 | 6.76 | ... | 6.300000 | 5.846667 | 6.880000 | 7.6250 | 6.278641 | 7.155056 | 6.700000 | 6.514286 | 7.233333 | 5.423853 |
2016 | NaN | 4.712000 | 5.390909 | 7.000000 | NaN | 7.225000 | 6.200000 | 6.900000 | NaN | NaN | ... | NaN | NaN | NaN | NaN | 6.540909 | 7.200000 | NaN | NaN | NaN | 5.730000 |
126 rows × 25 columns
三.离散化处理
在实际的数据分析项目中,对有的数据属性,我们往往并不关注数据的绝对取值,只关注它所处的区间或者等级
1.cut函数进行离散化
离散化也可称为分组、区间化
pd.cut(x, bins, right=True, labels=None, retbins=False, plecision=3, include_lowest=False)
参数解释︰×∶需要离散化的数组、Series、DataFrame对象bins :分组的依据
right=True 默认包括右端点(默认左开右闭区间)
比如,我们可以把评分9分及以上的电影定义为A,7到9分定义为B,5到7分定义为c,3到5分定义为D,小于3分定义为E
#x:需要离散化的数组:评分 bins:分组的依据[0,3,5,7,9] 默认左开右闭区间
pd.cut(df['评分'],[0,3,5,7,9,10])
运行结果
:
0 (9, 10]
1 (9, 10]
2 (9, 10]
3 (9, 10]
4 (9, 10]...
38717 (7, 9]
38718 (7, 9]
38719 (7, 9]
38720 (7, 9]
38721 (5, 7]
Name: 评分, Length: 38722, dtype: category
Categories (5, interval[int64]): [(0, 3] < (3, 5] < (5, 7] < (7, 9] < (9, 10]]
添加labels参数,labels要和bins区间划分一 一对应
pd.cut(df['评分'], [0, 3, 5, 7, 9, 10],labels=['E','D','C','B','A'])
运行结果
:
0 A
1 A
2 A
3 A
4 A..
38717 B
38718 B
38719 B
38720 B
38721 C
Name: 评分, Length: 38722, dtype: category
Categories (5, object): ['E' < 'D' < 'C' < 'B' < 'A']
新增一列评分等级
df['评分等级'] = pd.cut(df['评分'], [0, 3, 5, 7, 9, 10],labels=['E', 'D', 'C', 'B', 'A'])
df.head()
名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | 评分等级 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 美国 | 1994-09-10 00:00:00 | 142 | 1994 | 9.6 | 多伦多电影节 | A |
1 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 美国 | 1957-12-17 00:00:00 | 116 | 1957 | 9.5 | 美国 | A |
2 | 美丽人生 | 327855 | 剧情/喜剧/爱情 | 意大利 | 1997-12-20 00:00:00 | 116 | 1997 | 9.5 | 意大利 | A |
3 | 阿甘正传 | 580897 | 剧情/爱情 | 美国 | 1994-06-23 00:00:00 | 142 | 1994 | 9.4 | 洛杉矶首映 | A |
4 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 中国大陆 | 1993-01-01 00:00:00 | 171 | 1993 | 9.4 | 香港 | A |
可以根据投票人数来刻画电影热门程度
投票越多越热门
可以先设定区间,用np.np.percentile(a,q)
a是进行分位数处理的对象,q是百分位数
bins = np.percentile(df['投票人数'], [0,20,40,60,80,100])
df['热门程度']=pd.cut(df['投票人数'],bins,labels=['E', 'D', 'C', 'B', 'A'])
df.head()
名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | 评分等级 | 热门程度 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 美国 | 1994-09-10 00:00:00 | 142 | 1994 | 9.6 | 多伦多电影节 | A | A |
1 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 美国 | 1957-12-17 00:00:00 | 116 | 1957 | 9.5 | 美国 | A | A |
2 | 美丽人生 | 327855 | 剧情/喜剧/爱情 | 意大利 | 1997-12-20 00:00:00 | 116 | 1997 | 9.5 | 意大利 | A | A |
3 | 阿甘正传 | 580897 | 剧情/爱情 | 美国 | 1994-06-23 00:00:00 | 142 | 1994 | 9.4 | 洛杉矶首映 | A | A |
4 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 中国大陆 | 1993-01-01 00:00:00 | 171 | 1993 | 9.4 | 香港 | A | A |
df.tail()
名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | 评分等级 | 热门程度 | |
---|---|---|---|---|---|---|---|---|---|---|---|
38717 | 神学院 S | 46 | Adult | 法国 | 1905-06-05 00:00:00 | 58 | 1983 | 8.6 | 美国 | B | E |
38718 | 1935年 | 57 | 喜剧/歌舞 | 美国 | 1935-03-15 00:00:00 | 98 | 1935 | 7.6 | 美国 | B | E |
38719 | 血溅画屏 | 95 | 剧情/悬疑/犯罪/武侠/古装 | 中国大陆 | 1905-06-08 00:00:00 | 91 | 1986 | 7.1 | 美国 | B | D |
38720 | 魔窟中的幻想 | 51 | 惊悚/恐怖/儿童 | 中国大陆 | 1905-06-08 00:00:00 | 78 | 1986 | 8.0 | 美国 | B | E |
38721 | 列宁格勒围困之星火战役 Блокада: Фильм 2: Ленинградский ме... | 32 | 剧情/战争 | 俄罗斯 | 1905-05-30 00:00:00 | 97 | 1977 | 6.6 | 美国 | C | E |
烂片统计:评分人数多,分数低
注意这里条件并列要用& 而不是and,之前的博客记录过
df[(df['评分等级']=='E')&(df['热门程度']=='A')]
名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | 评分等级 | 热门程度 | |
---|---|---|---|---|---|---|---|---|---|---|---|
655 | B区 | 5187 | 剧情/惊悚/恐怖 | 中国大陆 | 2011-06-03 00:00:00 | 89 | 2011 | 2.3 | 中国大陆 | E | A |
4376 | 怖偶 | 4867 | 悬疑/惊悚 | 中国大陆 | 2014-05-07 00:00:00 | 88 | 2014 | 2.8 | 中国大陆 | E | A |
5413 | 床下有人 | 4309 | 悬疑/惊悚 | 中国大陆 | 2011-10-14 00:00:00 | 100 | 2011 | 2.8 | 中国大陆 | E | A |
6802 | 帝国秘符 | 4351 | 动作/冒险 | 中国大陆 | 2013-09-18 00:00:00 | 93 | 2013 | 3.0 | 中国大陆 | E | A |
8232 | 飞天 | 4764 | 剧情 | 中国大陆 | 2011-07-01 00:00:00 | 115 | 2011 | 2.9 | 中国大陆 | E | A |
8406 | 分手达人 | 3937 | 喜剧/爱情 | 中国大陆 | 2014-06-06 00:00:00 | 90 | 2014 | 2.7 | 中国大陆 | E | A |
9601 | 孤岛惊魂 | 2982 | 悬疑/惊悚/恐怖 | 中国大陆 | 2013-01-26 00:00:00 | 93 | 2012 | 2.8 | 中国大陆 | E | A |
10512 | 海天盛宴·韦口 | 3788 | 情色 | 中国大陆 | 2013-10-12 00:00:00 | 88 | 2013 | 2.9 | 网络 | E | A |
16797 | 孪生密码 | 6390 | 动作/悬疑 | 中国大陆 | 2013-11-08 00:00:00 | 96 | 2013 | 2.9 | 中国大陆 | E | A |
21528 | 拳皇 | 6329 | 动作/科幻/冒险 | 日本 | 2012-10-12 00:00:00 | 93 | 2010 | 3.0 | 中国大陆 | E | A |
22700 | 闪魂 | 3119 | 惊悚/犯罪 | 中国大陆 | 2014-02-21 00:00:00 | 94 | 2013 | 2.6 | 中国大陆 | E | A |
22878 | 少年毛泽东 | 3058 | 动画/儿童/冒险 | 中国大陆 | 2015-04-30 00:00:00 | 76 | 2015 | 2.4 | 中国大陆 | E | A |
24123 | 史前怪兽 | 3543 | 动作/惊悚/冒险 | 英国 | 2014-01-01 00:00:00 | 89 | 2013 | 3.0 | 中国大陆 | E | A |
28256 | 无极限之危情速递 | 6319 | 喜剧/动作/爱情/冒险 | 中国大陆 | 2011-08-12 00:00:00 | 94 | 2011 | 2.8 | 中国大陆 | E | A |
32093 | 异度公寓 | 3639 | 惊悚 | 中国大陆 | 2010-06-04 00:00:00 | 93 | 2010 | 2.7 | 中国大陆 | E | A |
32486 | 英雄之战 | 8359 | 动作/爱情 | 中国大陆 | 2014-03-21 00:00:00 | 90 | 2014 | 3.0 | 中国大陆 | E | A |
32659 | 咏春小龙 | 8861 | 剧情/动作 | 中国大陆 | 2013-07-20 00:00:00 | 90 | 2013 | 3.0 | 中国大陆 | E | A |
33483 | 再爱一次好不好 | 6999 | 喜剧/爱情 | 中国大陆 | 2014-04-11 00:00:00 | 94 | 2014 | 3.0 | 中国大陆 | E | A |
38650 | 大话天仙 | 21629 | 喜剧/奇幻/古装 | 中国大陆 | 2014-02-02 00:00:00 | 91 | 2014 | 3.0 | 中国大陆 | E | A |
38652 | 天机·富春山居图 | 74709 | 动作/冒险 | 中国大陆 | 2013-06-09 00:00:00 | 122 | 2013 | 2.9 | 中国大陆 | E | A |
38653 | 特工艾米拉 | 10852 | 动作/悬疑 | 中国大陆 | 2014-04-11 00:00:00 | 96 | 2014 | 2.7 | 中国大陆 | E | A |
38657 | 汽车人总动员 | 12892 | 喜剧/动画/冒险 | 中国大陆 | 2015-07-03 00:00:00 | 85 | 2015 | 2.3 | 中国大陆 | E | A |
38662 | 2016年中央电视台春节 | 17328 | 歌舞/真人秀 | 中国大陆 | 2016-02-07 00:00:00 | 280 | 2016 | 2.3 | 中国大陆 | E | A |
38668 | 放手爱 | 29254 | 喜剧/爱情 | 中国大陆 | 2014-04-30 00:00:00 | 93 | 2014 | 2.3 | 中国大陆 | E | A |
冷门高分电影
df[(df['热门程度']=='E')&(df['评分等级']=='A')]
名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | 评分等级 | 热门程度 | |
---|---|---|---|---|---|---|---|---|---|---|---|
456 | 未知电影 | 45 | 音乐 | 美国 | 2015-12-14 00:00:00 | 60 | 2015 | 9.3 | 美国 | A | E |
587 | BBC喜剧音 | 38 | 喜剧/音乐/歌舞 | 英国 | 2011-08-13 00:00:00 | 95 | 2011 | 9.3 | 美国 | A | E |
642 | 未知电影 | 38 | 纪录片/音乐 | 美国 | 2003-02-03 00:00:00 | 55 | 2003 | 9.2 | 美国 | A | E |
686 | 未知电影 | 63 | 音乐/舞台艺术 | 英国 | 2014-05-18 00:00:00 | 49 | 2014 | 9.5 | 美国 | A | E |
698 | 未知电影 | 52 | 纪录片 | 英国 | 2008-07-25 00:00:00 | 40 | 2008 | 9.8 | 美国 | A | E |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
37573 | 歌唱神探 | 36 | 剧情/悬疑/歌舞 | 英国 | 1986-11-16 00:00:00 | 415 | 1986 | 9.1 | 美国 | A | E |
37699 | 未知电影 | 56 | 纪录片 | 美国 | 1972-12-23 00:00:00 | 70 | 1972 | 9.3 | 美国 | A | E |
38104 | 山那边 | 70 | 剧情 | 美国 | 1975-11-14 00:00:00 | 103 | 1975 | 9.1 | 美国 | A | E |
38437 | 奎 | 62 | 纪录片/短片 | 美国 | 2015-08-19 00:00:00 | 9 | 2015 | 9.1 | 纽约电影论坛 | A | E |
38493 | 未知电影 | 41 | 纪录片/短片 | 英国 | 1905-06-29 00:00:00 | 57 | 2007 | 9.2 | 美国 | A | E |
245 rows × 11 columns
2.保存处理后的数据
#防止unnmaed,index=False
df.to_excel("movie_data3.xlsx",index=False)
四.合并数据集
1.append
先把数据集拆分为多个,再进行合并
拆分为美国和中国再合并
df_usa=df[df.产地=='美国']
df_china=df[df.产地=='中国大陆']
将这两个数据集进行合并
df_china.append(df_usa)
名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | 评分等级 | 热门程度 | |
---|---|---|---|---|---|---|---|---|---|---|---|
4 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 中国大陆 | 1993-01-01 00:00:00 | 171 | 1993 | 9.4 | 香港 | A | A |
21 | 大闹天宫 | 74881 | 动画/奇幻 | 中国大陆 | 1905-05-14 00:00:00 | 114 | 1961 | 9.2 | 上集 | A | A |
29 | 穹顶之下 | 51113 | 纪录片 | 中国大陆 | 2015-02-28 00:00:00 | 104 | 2015 | 9.2 | 中国大陆 | A | A |
38 | 茶馆 | 10678 | 剧情/历史 | 中国大陆 | 1905-06-04 00:00:00 | 118 | 1982 | 9.2 | 美国 | A | A |
45 | 山水情 | 10781 | 动画/短片 | 中国大陆 | 1905-06-10 00:00:00 | 19 | 1988 | 9.2 | 美国 | A | A |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
38709 | 跷家的一夜 | 82 | 喜剧/动作/惊悚/冒险 | 美国 | 1987-07-01 00:00:00 | 102 | 1987 | 7.8 | 美国 | B | D |
38711 | 零下的激情 | 199 | 剧情/爱情/犯罪 | 美国 | 1987-11-06 00:00:00 | 98 | 1987 | 7.4 | 美国 | B | D |
38713 | 离别秋波 | 240 | 剧情/爱情/音乐 | 美国 | 1986-02-19 00:00:00 | 90 | 1986 | 8.2 | 美国 | B | C |
38716 | 极乐森林 | 45 | 纪录片 | 美国 | 1986-09-14 00:00:00 | 90 | 1986 | 8.1 | 美国 | B | E |
38718 | 1935年 | 57 | 喜剧/歌舞 | 美国 | 1935-03-15 00:00:00 | 98 | 1935 | 7.6 | 美国 | B | E |
15778 rows × 11 columns
2.merge(最常用)
how=‘inner’,以left数据文件为基准,若与right数据文件有交集就进行保留,只在right而不在left的不保留
连接键:若两边有相同的可以用on
若没有的话,左边指定left_on,右边指定right_on
用index连接也可以
选取六部热门电影来操作
df1=df.loc[:5]
df1
名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | 评分等级 | 热门程度 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 美国 | 1994-09-10 00:00:00 | 142 | 1994 | 9.6 | 多伦多电影节 | A | A |
1 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 美国 | 1957-12-17 00:00:00 | 116 | 1957 | 9.5 | 美国 | A | A |
2 | 美丽人生 | 327855 | 剧情/喜剧/爱情 | 意大利 | 1997-12-20 00:00:00 | 116 | 1997 | 9.5 | 意大利 | A | A |
3 | 阿甘正传 | 580897 | 剧情/爱情 | 美国 | 1994-06-23 00:00:00 | 142 | 1994 | 9.4 | 洛杉矶首映 | A | A |
4 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 中国大陆 | 1993-01-01 00:00:00 | 171 | 1993 | 9.4 | 香港 | A | A |
5 | 泰坦尼克号 | 157074 | 剧情/爱情/灾难 | 美国 | 2012-04-10 00:00:00 | 194 | 2012 | 9.4 | 中国大陆 | A | A |
df2 = df.loc[:5][['名字', '产地']]
df2['票房']=[314115,2151,12123,314,11,312]
#票房随便写的
df2
名字 | 产地 | 票房 | |
---|---|---|---|
0 | 肖申克的救赎 | 美国 | 314115 |
1 | 控方证人 | 美国 | 2151 |
2 | 美丽人生 | 意大利 | 12123 |
3 | 阿甘正传 | 美国 | 314 |
4 | 霸王别姬 | 中国大陆 | 11 |
5 | 泰坦尼克号 | 美国 | 312 |
打乱数据
#index也乱了,恢复一下
df2=df2.sample(frac=1)
df2
名字 | 产地 | 票房 | |
---|---|---|---|
5 | 美丽人生 | 意大利 | 12123 |
4 | 阿甘正传 | 美国 | 314 |
2 | 肖申克的救赎 | 美国 | 314115 |
0 | 控方证人 | 美国 | 2151 |
3 | 霸王别姬 | 中国大陆 | 11 |
1 | 泰坦尼克号 | 美国 | 312 |
df2.index=range(len(df2))
df2
名字 | 产地 | 票房 | |
---|---|---|---|
0 | 控方证人 | 美国 | 2151 |
1 | 泰坦尼克号 | 美国 | 312 |
2 | 肖申克的救赎 | 美国 | 314115 |
3 | 霸王别姬 | 中国大陆 | 11 |
4 | 阿甘正传 | 美国 | 314 |
5 | 美丽人生 | 意大利 | 12123 |
df1和df2进行合并
此时对应的电影的index已经匹配不上了,所以要用on 的方式
票房产地都不适合作为连接的列,票房df1没有,产地有重复的,所以用名字来连接
pd.merge(df1,df2,how='inner',on='名字')
名字 | 投票人数 | 类型 | 产地_x | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | 评分等级 | 热门程度 | 产地_y | 票房 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 美国 | 1994-09-10 00:00:00 | 142 | 1994 | 9.6 | 多伦多电影节 | A | A | 美国 | 314115 |
1 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 美国 | 1957-12-17 00:00:00 | 116 | 1957 | 9.5 | 美国 | A | A | 美国 | 2151 |
2 | 美丽人生 | 327855 | 剧情/喜剧/爱情 | 意大利 | 1997-12-20 00:00:00 | 116 | 1997 | 9.5 | 意大利 | A | A | 意大利 | 12123 |
3 | 阿甘正传 | 580897 | 剧情/爱情 | 美国 | 1994-06-23 00:00:00 | 142 | 1994 | 9.4 | 洛杉矶首映 | A | A | 美国 | 314 |
4 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 中国大陆 | 1993-01-01 00:00:00 | 171 | 1993 | 9.4 | 香港 | A | A | 中国大陆 | 11 |
5 | 泰坦尼克号 | 157074 | 剧情/爱情/灾难 | 美国 | 2012-04-10 00:00:00 | 194 | 2012 | 9.4 | 中国大陆 | A | A | 美国 | 312 |
3.concat
将多个数据集进行批量合并
df1=df[:10]
df2=df[100:110]
df3=df[200:210]
#默认是增加行axis=0
#若要增加列 axis要设置为1
dff=pd.concat([df1,df2,df3])
dff
名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | 评分等级 | 热门程度 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 肖申克的救赎 | 692795 | 剧情/犯罪 | 美国 | 1994-09-10 00:00:00 | 142 | 1994 | 9.6 | 多伦多电影节 | A | A |
1 | 控方证人 | 42995 | 剧情/悬疑/犯罪 | 美国 | 1957-12-17 00:00:00 | 116 | 1957 | 9.5 | 美国 | A | A |
2 | 美丽人生 | 327855 | 剧情/喜剧/爱情 | 意大利 | 1997-12-20 00:00:00 | 116 | 1997 | 9.5 | 意大利 | A | A |
3 | 阿甘正传 | 580897 | 剧情/爱情 | 美国 | 1994-06-23 00:00:00 | 142 | 1994 | 9.4 | 洛杉矶首映 | A | A |
4 | 霸王别姬 | 478523 | 剧情/爱情/同性 | 中国大陆 | 1993-01-01 00:00:00 | 171 | 1993 | 9.4 | 香港 | A | A |
5 | 泰坦尼克号 | 157074 | 剧情/爱情/灾难 | 美国 | 2012-04-10 00:00:00 | 194 | 2012 | 9.4 | 中国大陆 | A | A |
6 | 辛德勒的名单 | 306904 | 剧情/历史/战争 | 美国 | 1993-11-30 00:00:00 | 195 | 1993 | 9.4 | 华盛顿首映 | A | A |
7 | 新世纪福音战士剧场版:Air/真心为你 新世紀エヴァンゲリオン劇場版 Ai | 24355 | 剧情/动作/科幻/动画/奇幻 | 日本 | 1997-07-19 00:00:00 | 87 | 1997 | 9.4 | 日本 | A | A |
8 | 银魂完结篇:直到永远的万事屋 劇場版 銀魂 完結篇 万事屋よ | 21513 | 剧情/动画 | 日本 | 2013-07-06 00:00:00 | 110 | 2013 | 9.4 | 日本 | A | A |
9 | 这个杀手不太冷 | 662552 | 剧情/动作/犯罪 | 法国 | 1994-09-14 00:00:00 | 133 | 1994 | 9.4 | 法国 | A | A |
100 | 101 | 146 | 喜剧/爱情 | 韩国 | 1993-06-19 00:00:00 | 112 | 1993 | 7.4 | 韩国 | B | D |
101 | 10 | 186 | 喜剧 | 英国 | 1995-01-25 00:00:00 | 101 | 1995 | 7.4 | 美国 | B | D |
102 | 素媛 | 114819 | 剧情/家庭 | 韩国 | 2013-10-02 00:00:00 | 123 | 2013 | 9.1 | 韩国 | A | A |
103 | 101忠狗续集:伦敦 | 924 | 喜剧/动画/家庭 | 美国 | 2003-01-21 00:00:00 | 70 | 2003 | 7.5 | 美国 | B | B |
104 | 10 | 9514 | 喜剧/家庭 | 美国 | 2000-09-22 00:00:00 | 100 | 2000 | 7.0 | 美国 | C | A |
105 | 10 | 601 | 剧情 | 韩国 | 2014-04-24 00:00:00 | 93 | 2013 | 7.2 | 美国 | B | C |
106 | 10件或 | 1770 | 剧情/喜剧/爱情 | 美国 | 2006-12-01 00:00:00 | 82 | 2006 | 7.7 | 美国 | B | B |
107 | 10年 | 1531 | 喜剧/同性 | 美国 | 2015-06-02 00:00:00 | 90 | 2014 | 6.9 | 美国 | C | B |
108 | 11·25自决之日 三岛由纪夫与年轻人们 11・25自決の | 149 | 剧情 | 日本 | 2012-06-02 00:00:00 | 119 | 2012 | 5.6 | 日本 | C | D |
109 | 泰坦尼克号 | 535491 | 剧情/爱情/灾难 | 美国 | 1998-04-03 00:00:00 | 194 | 1997 | 9.1 | 中国大陆 | A | A |
200 | 最完美的离婚 2014特别篇 | 18478 | 剧情/喜剧/爱情 | 日本 | 2014-02-08 00:00:00 | 120 | 2014 | 9.1 | 日本 | A | A |
201 | 2001夜物 | 84 | 剧情/动画 | 日本 | 2009-10-02 00:00:00 | 80 | 2009 | 6.6 | 美国 | C | D |
202 | 头七 頭 | 7039 | 恐怖 | 中国香港 | 2009-05-21 00:00:00 | 60 | 2009 | 6.2 | 美国 | C | A |
203 | 火车进站 L | 7001 | 纪录片/短片 | 法国 | 1896-01-06 | 60 | 1896 | 8.8 | 法国 | B | A |
204 | 银行舞蹈 | 6944 | 短片 | 美国 | 1905-07-01 00:00:00 | 60 | 2009 | 7.8 | 美国 | B | A |
205 | 2003提雅 | 48 | 音乐 | 荷兰 | 2003-10-07 00:00:00 | 200 | 2003 | 8.9 | 美国 | B | E |
206 | 死亡飞车3:地狱烈 | 6937 | 动作 | 美国 | 2012-12-12 00:00:00 | 60 | 2012 | 5.8 | 美国 | C | A |
207 | 时光钟摆 振り | 6876 | 剧情/动画/短片 | 日本 | 2012-03-20 00:00:00 | 60 | 2012 | 8.7 | 美国 | B | A |
208 | 你还可爱么 你還可愛 | 6805 | 短片 | 中国香港 | 2011-04-22 00:00:00 | 60 | 2011 | 8.3 | 美国 | B | A |
209 | 一碌蔗 | 6799 | 剧情/喜剧/爱情 | 中国香港 | 2002-09-19 00:00:00 | 60 | 2002 | 6.7 | 美国 | C | A |
pandas入门(3)相关推荐
- 【直播】耿远昊:Pandas入门讲解(安泰第四届数据科学训练营)
Pandas入门讲解 直播信息 主讲人:耿远昊,Datawhale成员,joyful-pandas作者. 直播时间:2021年04月07日 20:00~21:00 直播内容: 时间序列中的必知必会: ...
- python花萼长度表_Python 数据分析答疑 5:Pandas入门
8.23 第五课 Pandas入门作业 1: 使用如下代码创建 DataFrame, gdp = {"country":["United States", &q ...
- python使用教程pandas-十分钟搞定pandas(入门教程)
本文是对pandas官方网站上<10Minutes to pandas>的一个简单的翻译,原文在这里.这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook .习惯上 ...
- python使用教程pandas-Python 数据处理库 pandas 入门教程基本操作
pandas是一个Python语言的软件包,在我们使用Python语言进行机器学习编程的时候,这是一个非常常用的基础编程库.本文是对它的一个入门教程. pandas提供了快速,灵活和富有表现力的数据结 ...
- pandas pivot 占比_数据处理进阶pandas入门(十八)
回顾 在数据处理进阶pandas入门(十七)中,我们介绍了pandas中对groupby()方法的分组数据处理的两个方法:transform()和apply().我们需要掌握好这两个方法,对分组数据进 ...
- Pandas入门3(dtype+fillna+replace+rename+concat+join)
文章目录 5. dtype 数据类型 6. Missing data 缺失值 6.1 查找缺失值 pd.isnull(),pd.notnull() 6.2 填补缺失值 fillna(),replace ...
- Pandas入门2(DataFunctions+Maps+groupby+sort_values)
文章目录 3. Summary Functions and Maps 3.1 Summary Functions 数据总结函数 3.1.1 describe() 3.1.2 mean(),median ...
- Pandas入门1(DataFrame+Series读写/Index+Select+Assign)
文章目录 1. Creating, Reading and Writing 1.1 DataFrame 数据框架 1.2 Series 序列 1.3 Reading 读取数据 2. Indexing, ...
- pandas series取值_【小学生级】pandas入门到精通备查表——AI未来系列3
在未来面前,每个人都是学生 江海升月明,天涯共此时,关注江时! 引 子 篇为AI未来系列第三篇,中阶部分开始.pandas的数据分析功能比excel强太多,基本上学会pandas,走遍天下都不怕.这是 ...
- python数据分析df_Python数据分析pandas入门!(附数据分析资料)
Python数据分析pandas入门!(附数据分析资料) 1.pandas数据结构之DataFrame+ 这是小编准备的python数据分析资料!进群:700341555即可获取! Python数据分 ...
最新文章
- sql查询父节点所有子节点id_5招搞定SQL棘手问题,同事看到直呼“内行”
- select case when if 的一些用法
- 信号处理:傅立叶变换的波形分辨率和频率分辨率
- MVC5网站部署到IIS7
- 实例4:python
- java 数组 equals_java中用equals比较两个内容相同的字符数组
- 扇贝有道180919每日一句
- strcpy_s函数
- 解决win10学习汇编工具的烦恼——汇编学习工具DOSBox0.74的下载和使用(包含可用下载链接)
- apms阅卷系统服务器,APMS全通纸笔王网上阅卷系统网上操作指南.doc
- Fate Decision剧本
- mysql 时间加五分钟_mysql当前时间增加5分钟的实现方法
- linux最后一行awk,51CTO博客-专业IT技术博客创作平台-技术成就梦想
- hal系统命令 android,动态可用的 HAL | Android 开源项目 | Android Open Source Project...
- android模拟器dns,网络异常,显示无网络(修改DNS方法)
- 单仓库设施选址决策方法(重心法,C语言代码)
- 4. “强人”的“皮球”生涯
- TensorFlow Serving的使用
- html vb病毒,HTML_用vbs实现的一款Worm.Win32.VB.fw病毒专杀,在写了《Worm.Win32.VB.fw分析与清 - phpStudy...
- 存货做12月的期未处理时提示 :尚有单据为部分记账状态,不能进行12月的期未处理?...