3.Pandas
文章目录
- 
- 3.Pandas
 - 
- 3.3 Pandas进阶
 - 
- 3.3.1 数据重塑和轴向旋转
 - 
- (1)层次化索引
 - 
- Series的层次化索引
 - DataFrame的层次化索引
 - 层次化——电影数据示列
 
 - (2)数据旋转
 
 - 3.3.2 数据分组、分组运算
 - 3.3.3 离散化处理
 - 3.3.4 合并数据集
 - 
- (1)append
 - (2)merge
 - (3)concat
 
 
 
 
 
3.3 Pandas进阶
import pandas as pd
import numpy as np
3.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':'b']
a  1    1
   2    2
   3    3
b  1    4
   2    5
dtype: int32
s[:,1]
a    1
b    4
c    7
dtype: int32
通过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))
data
| 0 | 1 | 2 | |
|---|---|---|---|
| 0 | 0 | 1 | 2 | 
| 1 | 3 | 4 | 5 | 
| 2 | 6 | 7 | 8 | 
| 3 | 9 | 10 | 11 | 
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 | 
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

选取列
data['A']

设置名称
data.index.names=['row1','row2']
data

data.columns.names=['column1','column2']
data

行顺序调整
data.swaplevel('row1','row2')

层次化——电影数据示列
数据导入
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 | 香港 | 
df.drop('Unnamed: 0',axis=1)
df.index
RangeIndex(start=0, stop=38166, step=1)
set_index:可以把列变成索引
 reset_index:把索引变成列
把产地和年代同时设置成索引,产地是外层索引,年代是内层索引
df=df.set_index(['产地','年代'])
df.head()

每一个索引都是一个元组
df.index[0]
('美国', 1994)
获取所有的美国电影,由于产地信息已经变成了索引,因此可以用loc方法
df.loc['美国'].head()
| | 名字 | 投票人数 | 类型 | 上映时间 | 时长 | 评分 | 首映地点 |
 | —: | —: | -----------: | -------: | -------------: | ------------------: | —: | —: | -----------: |
 | 年代 | | | | | | | |
 | 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 | 华盛顿首映 |
这样做最大的好处就是我们可以简化很多的筛选环节
索引交换 swaplevel
df=df.swaplevel('产地','年代')
df.head()

取消层次化索引
df=df.reset_index()
df.head()
| 年代 | 产地 | 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)数据旋转
行列转化
data=df[:5]
data
| 年代 | 产地 | 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 可以直接让数据的行和列进行交换
data.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
data.stack()
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
data.stack().unstack()
| 年代 | 产地 | 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
group=df.groupby(df['产地'])
group
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002238D9028B0>
可以计算分组后的各个统计量
group.mean().head()
| 年代 | 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 | 
计算每年的平均评分
df['评分'].groupby(df['年代']).mean().head()
年代
1888    7.950000
1890    4.800000
1892    7.500000
1894    6.633333
1895    7.575000
Name: 评分, dtype: float64
只会对数值变量进行分组运算
df['年代']=df['年代'].astype('str')
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 | 
我们也可以传入多个分组变量
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 | 
获得每个地区,每一年的电影的评分的均值
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——会产生缺失值
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:精度
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 进行分位数计算
bins=np.percentile(df['投票人数'],[0,20,40,60,80,100])
df['热门程度']=pd.cut(df['投票人数'],bins,labels=['E','D','C','B','A'])
df
| 年代 | 产地 | 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
查看烂片:投票人数多,评分低
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 | 
冷门高分电影
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
将处理的数据保存
df.to_excel('movies_data3.xlsx')
3.3.4 合并数据集
(1)append
先把数据集拆分为多个,再进行合并
df_usa=df[df.产地=='美国']
df_cn=df[df.产地=='中国大陆']
df_cn.append(df_usa)
| 年代 | 产地 | 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部热门电影进行操作
df1=df.loc[:5]
df1
| 年代 | 产地 | 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 | 
df2=df.loc[:5][['名字','产地']]
df2['票房']=[111,222,333,444,555,666]
df2
| 名字 | 产地 | 票房 | |
|---|---|---|---|
| 0 | 肖申克的救赎 | 美国 | 111 | 
| 1 | 控方证人 | 美国 | 222 | 
| 2 | 美丽人生 | 意大利 | 333 | 
| 3 | 阿甘正传 | 美国 | 444 | 
| 4 | 霸王别姬 | 中国大陆 | 555 | 
| 5 | 泰坦尼克号 | 美国 | 666 | 
##打乱样本
df2=df2.sample(frac=1)
df2
| 名字 | 产地 | 票房 | |
|---|---|---|---|
| 0 | 肖申克的救赎 | 美国 | 111 | 
| 5 | 泰坦尼克号 | 美国 | 666 | 
| 4 | 霸王别姬 | 中国大陆 | 555 | 
| 2 | 美丽人生 | 意大利 | 333 | 
| 1 | 控方证人 | 美国 | 222 | 
| 3 | 阿甘正传 | 美国 | 444 | 
## 重新设置索引
df2.index=range(len(df2))
df2
| 名字 | 产地 | 票房 | |
|---|---|---|---|
| 0 | 肖申克的救赎 | 美国 | 111 | 
| 1 | 泰坦尼克号 | 美国 | 666 | 
| 2 | 霸王别姬 | 中国大陆 | 555 | 
| 3 | 美丽人生 | 意大利 | 333 | 
| 4 | 控方证人 | 美国 | 222 | 
| 5 | 阿甘正传 | 美国 | 444 | 
对df1和df2进行合并
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
将多个数据集进行批量合并
df1=df[:5]
df2=df[100:105]
df3=df[200:205]
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  
dff=pd.concat([df1,df2,df3],axis=0) ##默认axis=0 增加行数,axis=1增加列数
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 |