python数据分析之Pandas-3

视频:课程5_哔哩哔哩_bilibili

目录

python数据分析之Pandas-3

3.1 数据重塑和轴向旋转

(1)层次化索引

Series的层次化索引:

Dataframe的层次化索引:

每一个索引都是一个元组

取消层次化索引

(2)数据旋转

dataframe也可以使用stack和unstack,转化为层次化索引的Series

3.2 数据分组,分组运算

GroupBy技术:实现数据的分组,和分组运算,作用类似于数据透视表

按照电影的产地进行分组

先定义一个分组变量group

可以计算分组后各个的统计量

计算每年的平均评分

只会对数值变量进行分组运算

我们也可以传入多个分组变量

获得每个地区,每一年的电影的评分的均值

Series通过unstack方法转化为dataframe

会产生缺失值

3.3 离散化处理

冷门高分电影

将处理后的数据进行保存

3.4 合并数据集

( 1 )append

( 2 )merge

我们选取6部热门电影

( 3 )concat


python数据分析之Pandas-3

导入包

In [ ]:

import pandas as pd
import numpy as np

读入数据

In [ ]:

df = pd.read_excel(r'movie_data2.xlsx', index_col = 0)

In [ ]:

df[:5]

Out[ ]:

名字投票人数类型产地上映时间时长年代评分首映地点
0肖申克的救赎692795剧情/犯罪美国1994-09-10 00:00:0014219949.6多伦多电影节
1控方证人42995剧情/悬疑/犯罪美国1957-12-17 00:00:0011619579.5美国
2美丽人生327855剧情/喜剧/爱情意大利1997-12-20 00:00:0011619979.5意大利
3阿甘正传580897剧情/爱情美国1994-06-23 00:00:0014219949.4洛杉矶首映
4霸王别姬478523剧情/爱情/同性中国大陆1993-01-01 00:00:0017119939.4香港

3.1 数据重塑和轴向旋转

(1)层次化索引

层次化索引是pandas的一项重要功能,它能使我们在一个轴上拥有多个索引。

Series的层次化索引:

In [ ]:

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 #类似于合并单元格

Out[ ]:

a  1    1
   2    2
   3    3
b  1    4
   2    5
c  3    6
   1    7
d  2    8
   3    9
dtype: int32

In [ ]:

s.index

Out[ ]:

MultiIndex([('a', 1),
            ('a', 2),
            ('a', 3),
            ('b', 1),
            ('b', 2),
            ('c', 3),
            ('c', 1),
            ('d', 2),
            ('d', 3)],
           )

In [ ]:

s['a'] #外层索引

Out[ ]:

1    1
2    2
3    3
dtype: int32

In [ ]:

s['a':'c'] #切片

Out[ ]:

a  1    1
   2    2
   3    3
b  1    4
   2    5
c  3    6
   1    7
dtype: int32

In [ ]:

s[:,1] #内层索引

Out[ ]:

a    1
b    4
c    7
dtype: int32

In [ ]:

s['c',3] #提取具体的值

Out[ ]:

6

通过unstack方法可以将Series变成一个DataFrame 

In [ ]:

s.unstack()

Out[ ]:

123
a1.02.03.0
b4.05.0NaN
c7.0NaN6.0
dNaN8.09.0

In [ ]:

s.unstack().stack() #形式上的相互转换

Out[ ]:

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来说,行和列都能进行层次化索引。

In [ ]:

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

Out[ ]:

AB
ZXC
a1012
2345
b1678
291011

In [ ]:

data['A']

Out[ ]:

ZX
a101
234
b167
2910

In [ ]:

data.index.names = ["row1","row2"]
data.columns.names = ["col1", "col2"]
data

Out[ ]:

col1AB
col2ZXC
row1row2
a1012
2345
b1678
291011

In [ ]:

data.swaplevel("row1","row2") #位置调整

Out[ ]:

col1AB
col2ZXC
row2row1
1a012
2a345
1b678
2b91011

了解了层次化索引的基本知识之后,我们试着将电影数据也处理成一种多层索引的结构。

In [ ]:

df.index #默认索引

Out[ ]:

Int64Index([    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是把索引变成列

In [ ]:

df = df.set_index(["产地", "年代"])
df

Out[ ]:

名字投票人数类型上映时间时长评分首映地点
产地年代
美国1994肖申克的救赎692795剧情/犯罪1994-09-10 00:00:001429.600000多伦多电影节
1957控方证人42995剧情/悬疑/犯罪1957-12-17 00:00:001169.500000美国
意大利1997美丽人生327855剧情/喜剧/爱情1997-12-20 00:00:001169.500000意大利
美国1994阿甘正传580897剧情/爱情1994-06-23 00:00:001429.400000洛杉矶首映
中国大陆1993霸王别姬478523剧情/爱情/同性1993-01-01 00:00:001719.400000香港
...........................
美国19351935年57喜剧/歌舞1935-03-15 00:00:00987.600000美国
中国大陆1986血溅画屏95剧情/悬疑/犯罪/武侠/古装1905-06-08 00:00:00917.100000美国
1986魔窟中的幻想51惊悚/恐怖/儿童1905-06-08 00:00:00788.000000美国
俄罗斯1977列宁格勒围困之星火战役 Блокада: Фильм 2: Ленинградский ме...32剧情/战争1905-05-30 00:00:00976.600000美国
美国2018复仇者联盟3123456剧情/科幻2018-05-04 00:00:001426.935704美国

38163 rows × 7 columns

每一个索引都是一个元组

In [ ]:

df.index[0]

Out[ ]:

('美国', 1994)

获取所有的美国电影,由于产地信息已经变成了索引,因此要是用.loc方法。

In [ ]:

df.loc["美国"] #行标签索引行数据,注意索引多行时两边都是闭区间

Out[ ]:

名字投票人数类型上映时间时长评分首映地点
年代
1994肖申克的救赎692795剧情/犯罪1994-09-10 00:00:001429.600000多伦多电影节
1957控方证人42995剧情/悬疑/犯罪1957-12-17 00:00:001169.500000美国
1994阿甘正传580897剧情/爱情1994-06-23 00:00:001429.400000洛杉矶首映
2012泰坦尼克号157074剧情/爱情/灾难2012-04-10 00:00:001949.400000中国大陆
1993辛德勒的名单306904剧情/历史/战争1993-11-30 00:00:001959.400000华盛顿首映
........................
1987零下的激情199剧情/爱情/犯罪1987-11-06 00:00:00987.400000美国
1986离别秋波240剧情/爱情/音乐1986-02-19 00:00:00908.200000美国
1986极乐森林45纪录片1986-09-14 00:00:00908.100000美国
19351935年57喜剧/歌舞1935-03-15 00:00:00987.600000美国
2018复仇者联盟3123456剧情/科幻2018-05-04 00:00:001426.935704美国

11714 rows × 7 columns

这样做的最大好处是我们可以简化很多的筛选环节

每一个索引是一个元组

In [ ]:

df = df.swaplevel("产地", "年代") #调换标签顺序
df

Out[ ]:

名字投票人数类型上映时间时长评分首映地点
年代产地
1994美国肖申克的救赎692795剧情/犯罪1994-09-10 00:00:001429.600000多伦多电影节
1957美国控方证人42995剧情/悬疑/犯罪1957-12-17 00:00:001169.500000美国
1997意大利美丽人生327855剧情/喜剧/爱情1997-12-20 00:00:001169.500000意大利
1994美国阿甘正传580897剧情/爱情1994-06-23 00:00:001429.400000洛杉矶首映
1993中国大陆霸王别姬478523剧情/爱情/同性1993-01-01 00:00:001719.400000香港
...........................
1935美国1935年57喜剧/歌舞1935-03-15 00:00:00987.600000美国
1986中国大陆血溅画屏95剧情/悬疑/犯罪/武侠/古装1905-06-08 00:00:00917.100000美国
中国大陆魔窟中的幻想51惊悚/恐怖/儿童1905-06-08 00:00:00788.000000美国
1977俄罗斯列宁格勒围困之星火战役 Блокада: Фильм 2: Ленинградский ме...32剧情/战争1905-05-30 00:00:00976.600000美国
2018美国复仇者联盟3123456剧情/科幻2018-05-04 00:00:001426.935704美国

38163 rows × 7 columns

In [ ]:

df.loc[1994]

Out[ ]:

名字投票人数类型上映时间时长评分首映地点
产地
美国肖申克的救赎692795剧情/犯罪1994-09-10 00:00:001429.6多伦多电影节
美国阿甘正传580897剧情/爱情1994-06-23 00:00:001429.4洛杉矶首映
法国这个杀手不太冷662552剧情/动作/犯罪1994-09-14 00:00:001339.4法国
美国34街的768剧情/家庭/奇幻1994-12-23 00:00:001147.9美国
中国大陆活着202794剧情/家庭1994-05-18 00:00:001329.0法国
........................
美国鬼精灵2: 恐怖60喜剧/恐怖/奇幻1994-04-08 00:00:00855.8美国
英国黑色第1644剧情/惊悚1996-02-01 00:00:001066.8美国
日本蜡笔小新之布里布里王国的秘密宝藏 クレヨンしんちゃん ブリブリ王国の2142动画1994-04-23 00:00:00947.7日本
日本龙珠Z剧场版10:两人面临危机! 超战士难以成眠 ドラゴンボール Z 劇場版:危険なふたり!579动画1994-03-12 00:00:00537.2美国
中国香港重案实录之惊天械劫案 重案實錄之驚天械劫90动作/犯罪1905-06-16 00:00:001147.3美国

489 rows × 7 columns

取消层次化索引

In [ ]:

df = df.reset_index()
df[:5]

Out[ ]:

年代产地名字投票人数类型上映时间时长评分首映地点
01994美国肖申克的救赎692795剧情/犯罪1994-09-10 00:00:001429.6多伦多电影节
11957美国控方证人42995剧情/悬疑/犯罪1957-12-17 00:00:001169.5美国
21997意大利美丽人生327855剧情/喜剧/爱情1997-12-20 00:00:001169.5意大利
31994美国阿甘正传580897剧情/爱情1994-06-23 00:00:001429.4洛杉矶首映
41993中国大陆霸王别姬478523剧情/爱情/同性1993-01-01 00:00:001719.4香港

(2)数据旋转

行列转化:以前5部电影为例

In [ ]:

data = df[:5]
data

Out[ ]:

年代产地名字投票人数类型上映时间时长评分首映地点
01994美国肖申克的救赎692795剧情/犯罪1994-09-10 00:00:001429.6多伦多电影节
11957美国控方证人42995剧情/悬疑/犯罪1957-12-17 00:00:001169.5美国
21997意大利美丽人生327855剧情/喜剧/爱情1997-12-20 00:00:001169.5意大利
31994美国阿甘正传580897剧情/爱情1994-06-23 00:00:001429.4洛杉矶首映
41993中国大陆霸王别姬478523剧情/爱情/同性1993-01-01 00:00:001719.4香港

.T可以直接让数据的行列进行交换

In [ ]:

data.T

Out[ ]:

01234
年代19941957199719941993
产地美国美国意大利美国中国大陆
名字肖申克的救赎控方证人美丽人生阿甘正传霸王别姬
投票人数69279542995327855580897478523
类型剧情/犯罪剧情/悬疑/犯罪剧情/喜剧/爱情剧情/爱情剧情/爱情/同性
上映时间1994-09-10 00:00:001957-12-17 00:00:001997-12-20 00:00:001994-06-23 00:00:001993-01-01 00:00:00
时长142116116142171
评分9.69.59.59.49.4
首映地点多伦多电影节美国意大利洛杉矶首映香港

dataframe也可以使用stack和unstack,转化为层次化索引的Series

In [ ]:

data.stack()

Out[ ]:

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

In [ ]:

data.stack().unstack()  #转回来

Out[ ]:

年代产地名字投票人数类型上映时间时长评分首映地点
01994美国肖申克的救赎692795剧情/犯罪1994-09-101429.6多伦多电影节
11957美国控方证人42995剧情/悬疑/犯罪1957-12-171169.5美国
21997意大利美丽人生327855剧情/喜剧/爱情1997-12-201169.5意大利
31994美国阿甘正传580897剧情/爱情1994-06-231429.4洛杉矶首映
41993中国大陆霸王别姬478523剧情/爱情/同性1993-01-011719.4香港

3.2 数据分组,分组运算

GroupBy技术:实现数据的分组,和分组运算,作用类似于数据透视表

按照电影的产地进行分组

In [ ]:

group = df.groupby(df["产地"])

先定义一个分组变量group

In [ ]:

type(group)

Out[ ]:

pandas.core.groupby.generic.DataFrameGroupBy

可以计算分组后各个的统计量

In [ ]:

group.mean() 

Out[ ]:

年代投票人数时长评分
产地
中国台湾1999.0097098474.86407887.2572827.066667
中国大陆2004.58243210915.58770881.5170146.062991
中国香港1991.0888658141.70987088.5532146.473551
丹麦1999.0913712003.78172688.5076147.246701
俄罗斯1984.8928571021.18067296.1008407.557143
其他1998.7217211619.14445087.6563997.226713
加拿大2002.5204511921.83497980.5923846.727221
印度2006.0393263219.587079120.9494386.864888
墨西哥1992.7863251191.98290692.6410267.085470
巴西1999.8888893606.33333388.3737377.232323
德国1996.0538692624.73653392.2585707.187365
意大利1985.5991903374.955466104.3333337.183131
日本1999.8865363592.01578185.0105877.192569
比利时1999.5036501244.15328583.0656937.197080
法国1991.7940443663.06638090.2490137.243093
波兰1987.027624881.64088480.7348077.441989
泰国2009.1292525322.72449088.4421776.109184
澳大利亚2002.9661024798.11186485.5932206.953559
瑞典1987.1069521549.70053594.6256687.425668
美国1994.5198918677.29486189.9760976.923351
英国1996.6309264979.83784889.2133187.498420
荷兰2001.198675957.58940475.8874177.160265
西班牙2001.5462753355.26636690.9051927.025056
阿根廷2004.2123892283.93805392.5486737.248673
韩国2008.1005966527.518629100.0186296.351118

In [ ]:

group.sum()

Out[ ]:

年代投票人数时长评分
产地
中国台湾12353885237466539254367.200000
中国大陆75993724138099330903122984.800000
中国香港56686302317944825211118430.200000
丹麦393821394745174361427.600000
俄罗斯944809486082457443597.200000
其他3763593304884916505713607.900000
加拿大14197871362581571404769.600000
印度7141501146173430582443.900000
墨西哥23315613946210839829.000000
巴西1979893570278749716.000000
德国20379712679856941967338.300000
意大利14713292500842773115322.700000
日本100114321798163142556336006.000000
比利时27393217044911380986.000000
法国55511301020896625152420186.500000
波兰359652159577146131347.000000
泰国5906841564881260021796.100000
澳大利亚5908751415443252502051.300000
瑞典371589289794176951388.600000
美国23363806101645832105398081100.135704
英国53070451323640923712919930.800000
荷兰302181144596114591081.200000
西班牙8866851486383402713112.100000
阿根廷22647625808510458819.100000
韩国269487187599301342258523.200000

计算每年的平均评分

In [ ]:

df["评分"].groupby(df["年代"]).mean()

Out[ ]:

年代
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

只会对数值变量进行分组运算

In [ ]:

df["年代"] = df["年代"].astype("str")
df.groupby(df["产地"]).median() #不会再对年代进行求取

Out[ ]:

投票人数时长评分
产地
中国台湾487.092.07.1
中国大陆502.090.06.4
中国香港637.092.06.5
丹麦182.094.07.3
俄罗斯132.593.07.7
其他158.090.07.4
加拿大258.089.06.8
印度139.0131.07.0
墨西哥183.094.07.2
巴西131.096.07.3
德国212.094.07.3
意大利187.0101.07.3
日本359.089.07.3
比利时226.090.07.3
法国244.095.07.3
波兰174.087.07.5
泰国542.592.56.2
澳大利亚323.095.07.0
瑞典191.096.07.6
美国415.093.07.0
英国345.092.07.6
荷兰180.085.07.3
西班牙267.097.07.1
阿根廷146.097.07.3
韩国1007.0104.06.5

我们也可以传入多个分组变量

In [ ]:

df.groupby([df["产地"],df["年代"]]).mean() #根据两个变量进行分组

Out[ ]:

投票人数时长评分
产地年代
中国台湾1963121.000000113.0000006.400000
1965153.666667105.0000006.800000
196651.00000060.0000007.900000
19674444.000000112.0000008.000000
196889.00000083.0000007.400000
...............
韩国20125812.542857100.7714296.035238
201310470.37037097.7314816.062037
20143776.26666798.6666675.650833
20153209.247706100.2660555.423853
20161739.850000106.1000005.730000

1578 rows × 3 columns

获得每个地区,每一年的电影的评分的均值

In [ ]:

means = group = df["评分"].groupby([df["产地"], df["年代"]]).mean()
means

Out[ ]:

产地    年代  
中国台湾  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

会产生缺失值

In [ ]:

means.unstack().T

Out[ ]:

产地中国台湾中国大陆中国香港丹麦俄罗斯其他加拿大印度墨西哥巴西...波兰泰国澳大利亚瑞典美国英国荷兰西班牙阿根廷韩国
年代
1888NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaN7.950000NaNNaNNaNNaN
1890NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN4.800000NaNNaNNaNNaNNaN
1892NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
1894NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN6.450000NaNNaNNaNNaNNaN
1895NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
..................................................................
20137.0764715.3065006.1057146.5555566.8750006.8535716.0181826.4000006.9833338.00...6.9666675.5680006.760007.1006.3082557.4601406.336.3583336.6166676.062037
20146.5222224.9638305.6166677.1200007.1750006.5962505.9217396.3741947.2500006.86...7.0600005.6535716.568756.9606.3930567.2533987.306.8687507.1500005.650833
20156.5760004.9691895.5891897.1666677.3428576.7327276.0187506.7363646.5000006.76...6.3000005.8466676.880007.6256.2314867.1232566.706.5142867.2333335.423853
2016NaN4.7120005.3909097.000000NaN6.8333336.2000006.900000NaNNaN...NaNNaNNaNNaN6.5225817.200000NaNNaNNaN5.730000
2018NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN6.935704NaNNaNNaNNaNNaN

127 rows × 25 columns

3.3 离散化处理

在实际的数据分析项目中,对有的数据属性,我们往往并不关注数据的绝对取值,只关心它所处的区间或者等级

比如,我们不关心具体是9.6还是9.7,都是高分电影,注意的是它所在的等级,可以把评分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精度。

In [ ]:

df["评分等级"] = pd.cut(df["评分"], [0,3,5,7,9,10], labels = ['E','D','C','B','A']) 
#labels要和区间划分一一对应
df[0:5]

Out[ ]:

年代产地名字投票人数类型上映时间时长评分首映地点评分等级
01994美国肖申克的救赎692795剧情/犯罪1994-09-10 00:00:001429.6多伦多电影节A
11957美国控方证人42995剧情/悬疑/犯罪1957-12-17 00:00:001169.5美国A
21997意大利美丽人生327855剧情/喜剧/爱情1997-12-20 00:00:001169.5意大利A
31994美国阿甘正传580897剧情/爱情1994-06-23 00:00:001429.4洛杉矶首映A
41993中国大陆霸王别姬478523剧情/爱情/同性1993-01-01 00:00:001719.4香港A

同样的,我们可以根据投票人数来刻画电影的热门

投票越多的热门程度越高

In [ ]:

bins = np.percentile(df["投票人数"], [0,20,40,60,80,100]) 
#获取分位数
df["热门程度"] = pd.cut(df["投票人数"],bins,labels = ['E','D','C','B','A'])
df[:5]

Out[ ]:

年代产地名字投票人数类型上映时间时长评分首映地点评分等级热门程度
01994美国肖申克的救赎692795剧情/犯罪1994-09-10 00:00:001429.6多伦多电影节AA
11957美国控方证人42995剧情/悬疑/犯罪1957-12-17 00:00:001169.5美国AA
21997意大利美丽人生327855剧情/喜剧/爱情1997-12-20 00:00:001169.5意大利AA
31994美国阿甘正传580897剧情/爱情1994-06-23 00:00:001429.4洛杉矶首映AA
41993中国大陆霸王别姬478523剧情/爱情/同性1993-01-01 00:00:001719.4香港AA

大烂片集合:投票人数很多,评分很低

遗憾的是,我们可以发现,烂片几乎都是中国大陆的

In [ ]:

df[(df.热门程度 == 'A') & (df.评分等级 == 'E')]

Out[ ]:

年代产地名字投票人数类型上映时间时长评分首映地点评分等级热门程度
6232011中国大陆B区5187剧情/惊悚/恐怖2011-06-03 00:00:00892.3中国大陆EA
41672014中国大陆怖偶4867悬疑/惊悚2014-05-07 00:00:00882.8中国大陆EA
52002011中国大陆床下有人4309悬疑/惊悚2011-10-14 00:00:001002.8中国大陆EA
65852013中国大陆帝国秘符4351动作/冒险2013-09-18 00:00:00933.0中国大陆EA
80092011中国大陆飞天4764剧情2011-07-01 00:00:001152.9中国大陆EA
81812014中国大陆分手达人3937喜剧/爱情2014-06-06 00:00:00902.7中国大陆EA
93722012中国大陆孤岛惊魂2982悬疑/惊悚/恐怖2013-01-26 00:00:00932.8中国大陆EA
102752013中国大陆海天盛宴·韦口3788情色2013-10-12 00:00:00882.9网络EA
165122013中国大陆孪生密码6390动作/悬疑2013-11-08 00:00:00962.9中国大陆EA
211892010日本拳皇6329动作/科幻/冒险2012-10-12 00:00:00933.0中国大陆EA
223482013中国大陆闪魂3119惊悚/犯罪2014-02-21 00:00:00942.6中国大陆EA
225242015中国大陆少年毛泽东3058动画/儿童/冒险2015-04-30 00:00:00762.4中国大陆EA
237542013英国史前怪兽3543动作/惊悚/冒险2014-01-01 00:00:00893.0中国大陆EA
278322011中国大陆无极限之危情速递6319喜剧/动作/爱情/冒险2011-08-12 00:00:00942.8中国大陆EA
316222010中国大陆异度公寓3639惊悚2010-06-04 00:00:00932.7中国大陆EA
320072014中国大陆英雄之战8359动作/爱情2014-03-21 00:00:00903.0中国大陆EA
321802013中国大陆咏春小龙8861剧情/动作2013-07-20 00:00:00903.0中国大陆EA
329902014中国大陆再爱一次好不好6999喜剧/爱情2014-04-11 00:00:00943.0中国大陆EA
380902014中国大陆大话天仙21629喜剧/奇幻/古装2014-02-02 00:00:00913.0中国大陆EA
380922013中国大陆天机·富春山居图74709动作/冒险2013-06-09 00:00:001222.9中国大陆EA
380932014中国大陆特工艾米拉10852动作/悬疑2014-04-11 00:00:00962.7中国大陆EA
380972015中国大陆汽车人总动员12892喜剧/动画/冒险2015-07-03 00:00:00852.3中国大陆EA
381022016中国大陆2016年中央电视台春节17328歌舞/真人秀2016-02-07 00:00:002802.3中国大陆EA
381082014中国大陆放手爱29254喜剧/爱情2014-04-30 00:00:00932.3中国大陆EA

冷门高分电影

In [ ]:

df[(df.热门程度 == 'E') & (df.评分等级 == 'A')]

Out[ ]:

年代产地名字投票人数类型上映时间时长评分首映地点评分等级热门程度
5632011英国BBC喜剧音38喜剧/音乐/歌舞2011-08-13 00:00:00959.3美国AE
8952014日本JOJO的奇妙冒险 特别见面会 Walk Like Crusade36纪录片2014-10-26 00:00:001379.3美国AE
10992012英国Pond一家最45纪录片2012-09-29 00:00:00129.2美国AE
15402007英国阿森纳:温格的十一人74运动2007-10-22 00:00:00789.5美国AE
15472009英国阿斯加德远征59纪录片2011-09-17 00:00:00859.3美国AE
....................................
368462012中国大陆末了,未了34剧情/喜剧/爱情2012-12-16 00:00:00909.5美国AE
370002015中国大陆身经百战74纪录片2015-03-24 00:00:00919.1美国AE
370331986英国歌唱神探36剧情/悬疑/歌舞1986-11-16 00:00:004159.1美国AE
375571975美国山那边70剧情1975-11-14 00:00:001039.1美国AE
378832015美国62纪录片/短片2015-08-19 00:00:0099.1纽约电影论坛AE

177 rows × 11 columns

将处理后的数据进行保存

In [ ]:

df.to_excel("movie_data3.xlsx")

3.4 合并数据集

( 1 )append

先把数据集拆分为多个,再进行合并

In [ ]:

df_usa = df[df.产地 == "美国"]
df_china = df[df.产地 == "中国大陆"]

In [ ]:

df_china.append(df_usa) #直接追加到后面,最好是变量相同的

Out[ ]:

年代产地名字投票人数类型上映时间时长评分首映地点评分等级热门程度
41993中国大陆霸王别姬478523剧情/爱情/同性1993-01-01 00:00:001719.400000香港AA
211961中国大陆大闹天宫74881动画/奇幻1905-05-14 00:00:001149.200000上集AA
292015中国大陆穹顶之下51113纪录片2015-02-28 00:00:001049.200000中国大陆AA
381982中国大陆茶馆10678剧情/历史1905-06-04 00:00:001189.200000美国AA
451988中国大陆山水情10781动画/短片1905-06-10 00:00:00199.200000美国AA
....................................
381511987美国零下的激情199剧情/爱情/犯罪1987-11-06 00:00:00987.400000美国BD
381531986美国离别秋波240剧情/爱情/音乐1986-02-19 00:00:00908.200000美国BC
381561986美国极乐森林45纪录片1986-09-14 00:00:00908.100000美国BE
381581935美国1935年57喜剧/歌舞1935-03-15 00:00:00987.600000美国BE
381622018美国复仇者联盟3123456剧情/科幻2018-05-04 00:00:001426.935704美国CA

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)

我们选取6部热门电影

In [ ]:

df1 = df.loc[:5]
df1

Out[ ]:

年代产地名字投票人数类型上映时间时长评分首映地点评分等级热门程度
01994美国肖申克的救赎692795剧情/犯罪1994-09-10 00:00:001429.6多伦多电影节AA
11957美国控方证人42995剧情/悬疑/犯罪1957-12-17 00:00:001169.5美国AA
21997意大利美丽人生327855剧情/喜剧/爱情1997-12-20 00:00:001169.5意大利AA
31994美国阿甘正传580897剧情/爱情1994-06-23 00:00:001429.4洛杉矶首映AA
41993中国大陆霸王别姬478523剧情/爱情/同性1993-01-01 00:00:001719.4香港AA
52012美国泰坦尼克号157074剧情/爱情/灾难2012-04-10 00:00:001949.4中国大陆AA

In [ ]:

df2 = df.loc[:5][["名字","产地"]]
df2["票房"] = [123344,23454,55556,333,6666,444]

In [ ]:

df2

Out[ ]:

名字产地票房
0肖申克的救赎美国123344
1控方证人美国23454
2美丽人生意大利55556
3阿甘正传美国333
4霸王别姬中国大陆6666
5泰坦尼克号美国444

In [ ]:

df2 = df2.sample(frac = 1) #打乱数据,但index还是原来那样

In [ ]:

df2.index = range(len(df2))
df2

Out[ ]:

名字产地票房
0泰坦尼克号美国444
1美丽人生意大利55556
2霸王别姬中国大陆6666
3肖申克的救赎美国123344
4阿甘正传美国333
5控方证人美国23454

现在,我们需要把df1和df2合并

我们发现,df2有票房数据,df1有评分等其他信息
由于样本的顺序不一致,因此不能直接采取直接复制的方法

In [ ]:

pd.merge(df1, df2, how = "inner", on = "名字")

Out[ ]:

年代产地_x名字投票人数类型上映时间时长评分首映地点评分等级热门程度产地_y票房
01994美国肖申克的救赎692795剧情/犯罪1994-09-10 00:00:001429.6多伦多电影节AA美国123344
11957美国控方证人42995剧情/悬疑/犯罪1957-12-17 00:00:001169.5美国AA美国23454
21997意大利美丽人生327855剧情/喜剧/爱情1997-12-20 00:00:001169.5意大利AA意大利55556
31994美国阿甘正传580897剧情/爱情1994-06-23 00:00:001429.4洛杉矶首映AA美国333
41993中国大陆霸王别姬478523剧情/爱情/同性1993-01-01 00:00:001719.4香港AA中国大陆6666
52012美国泰坦尼克号157074剧情/爱情/灾难2012-04-10 00:00:001949.4中国大陆AA美国444

由于两个数据集都存在产地,因此合并后会有两个产地信息

( 3 )concat

将多个数据集进行批量合并

In [ ]:

df1 = df[:10]
df2 = df[100:110]
df3 = df[200:210]
dff = pd.concat([df1,df2,df3],axis = 0) #默认axis = 0,列拼接需要修改为1
dff

Out[ ]:

年代产地名字投票人数类型上映时间时长评分首映地点评分等级热门程度
01994美国肖申克的救赎692795剧情/犯罪1994-09-10 00:00:001429.6多伦多电影节AA
11957美国控方证人42995剧情/悬疑/犯罪1957-12-17 00:00:001169.5美国AA
21997意大利美丽人生327855剧情/喜剧/爱情1997-12-20 00:00:001169.5意大利AA
31994美国阿甘正传580897剧情/爱情1994-06-23 00:00:001429.4洛杉矶首映AA
41993中国大陆霸王别姬478523剧情/爱情/同性1993-01-01 00:00:001719.4香港AA
52012美国泰坦尼克号157074剧情/爱情/灾难2012-04-10 00:00:001949.4中国大陆AA
61993美国辛德勒的名单306904剧情/历史/战争1993-11-30 00:00:001959.4华盛顿首映AA
71997日本新世纪福音战士剧场版:Air/真心为你 新世紀エヴァンゲリオン劇場版 Ai24355剧情/动作/科幻/动画/奇幻1997-07-19 00:00:00879.4日本AA
82013日本银魂完结篇:直到永远的万事屋 劇場版 銀魂 完結篇 万事屋よ21513剧情/动画2013-07-06 00:00:001109.4日本AA
91994法国这个杀手不太冷662552剧情/动作/犯罪1994-09-14 00:00:001339.4法国AA
1001993韩国101146喜剧/爱情1993-06-19 00:00:001127.4韩国BD
1011995英国10186喜剧1995-01-25 00:00:001017.4美国BD
1022013韩国素媛114819剧情/家庭2013-10-02 00:00:001239.1韩国AA
1032003美国101忠狗续集:伦敦924喜剧/动画/家庭2003-01-21 00:00:00707.5美国BB
1042000美国109514喜剧/家庭2000-09-22 00:00:001007.0美国CA
1052013韩国10601剧情2014-04-24 00:00:00937.2美国BC
1062006美国10件或1770剧情/喜剧/爱情2006-12-01 00:00:00827.7美国BB
1072014美国10年1531喜剧/同性2015-06-02 00:00:00906.9美国CB
1082012日本11·25自决之日 三岛由纪夫与年轻人们 11・25自決の149剧情2012-06-02 00:00:001195.6日本CD
1091997美国泰坦尼克号535491剧情/爱情/灾难1998-04-03 00:00:001949.1中国大陆AA
2002014日本最完美的离婚 2014特别篇18478剧情/喜剧/爱情2014-02-08 00:00:001209.1日本AA
2012009日本2001夜物84剧情/动画2009-10-02 00:00:00806.6美国CD
2022009中国香港头七 頭7039恐怖2009-05-21 00:00:00606.2美国CA
2031896法国火车进站 L7001纪录片/短片1896-01-06608.8法国BA
2042009美国银行舞蹈6944短片1905-07-01 00:00:00607.8美国BA
2052003荷兰2003提雅48音乐2003-10-07 00:00:002008.9美国BE
2062012美国死亡飞车3:地狱烈6937动作2012-12-12 00:00:00605.8美国CA
2072012日本时光钟摆 振り6876剧情/动画/短片2012-03-20 00:00:00608.7美国BA
2082011中国香港你还可爱么 你還可愛6805短片2011-04-22 00:00:00608.3美国BA
2092002中国香港一碌蔗6799剧情/喜剧/爱情2002-09-19 00:00:00606.7美国CA
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python是一种功能强大的编程语言,可以用于各种数据分析任务。而在Python数据分析工具库中,pandas是最受欢迎和广泛使用的工具之一。 Pandas提供了用于处理和分析数据的高级数据结构和函数。其最常用的数据结构是DataFrame,类似于Excel中的表格。通过Pandas,我们可以读取Excel文件,并将其转换为DataFrame对象进行进一步处理。 使用Pandas进行Excel数据分析的第一步是读取Excel文件。Pandas提供了read_excel函数,可以方便地读取Excel文件并转换为DataFrame对象。我们可以指定要读取的工作表、要保留的列、要跳过的行等。 一旦我们将Excel文件读取为DataFrame对象,我们可以使用Pandas提供的丰富函数和操作对数据进行各种处理和分析。例如,我们可以使用head()函数查看前几行数据,使用describe()函数获取数据的统计摘要,使用mean()函数计算平均值,使用groupby()函数对数据进行分组等等。 除了数据处理和分析,Pandas还提供了各种工具来处理缺失值和数据清洗。我们可以使用dropna()函数删除含有缺失值的行或列,使用fillna()函数将缺失值填充为指定的值,使用replace()函数替换数据中的特定值等。 在数据分析完成后,我们可以使用to_excel函数将DataFrame对象保存为Excel文件。在保存时,我们可以指定要保存的工作表、保存的位置和文件名等。 总之,Pandas是一个非常强大和灵活的库,可以使Python在处理Excel数据时变得更加简单和高效。无论是数据的读取、处理、分析还是保存,Pandas都提供了丰富而简洁的函数和操作,使得数据分析变得更加容易。 ### 回答2: Pandas是一个功能强大的数据分析工具,可以轻松地处理和分析各种数据。同时,Pandas还提供了许多用于读取、处理和写入Excel文件的功能,让我们能够更方便地从Excel文件中提取和处理数据。 在使用Pandas进行Excel数据分析时,我们首先需要使用`pandas.read_excel()`函数读取Excel文件,并将其存储为一个Pandas的DataFrame对象。这样可以轻松地使用Pandas的各种数据处理和分析功能。 Pandas提供了一系列的函数来处理Excel数据,比如对数据进行过滤、排序、计算统计量等。我们可以使用`head()`函数快速查看数据的前几行,使用`describe()`函数生成数据的统计概要信息,使用`sort_values()`函数对数据进行排序等。 除此之外,Pandas还提供了一些方便的函数来进行Excel数据的写入。我们可以使用`to_excel()`函数将DataFrame对象写入Excel文件,并通过参数来设置写入的Sheet名称、行列标签等。 除了基本的读写操作,Pandas还提供了丰富的数据转换和清洗功能,如数据合并、去重、填充空值等等。这些功能可以帮助我们更好地理解和分析Excel中的数据。 总而言之,Pandas是一个非常方便和强大的数据分析工具,可以让我们轻松地处理和分析Excel数据。通过Pandas,我们可以更加快速和高效地提取、清洗和分析数据,将Excel文件作为数据分析的重要来源之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值