如何为贵州省自由贸易试验区创建专业网站?

摘要:自由贸易试验区网站建设方案,贵州省建设网站,自己如何开自己的商城,项目建设资金来源网站3.Pandas 文章目录3.Pandas3.1 Pandas基本介绍3.1.1 Pandas的基本数据结构3.1.1.1 Pandas库的Series类
自由贸易试验区网站建设方案,贵州省建设网站,自己如何开自己的商城,项目建设资金来源网站3.Pandas 文章目录3.Pandas3.1 Pandas基本介绍3.1.1 Pandas的基本数据结构3.1.1.1 Pandas库的Series类型3.1.1.2 Pandas库的DataFrame类型DataFrame初始化DataFrame查看数据3.1.2 Pandas读取数据及数据操作行操作添加一行删除一行列操作增加一列删除一列通过标签选择数据条件选…3.Pandas 文章目录3.Pandas3.1 Pandas基本介绍3.1.1 Pandas的基本数据结构3.1.1.1 Pandas库的Series类型3.1.1.2 Pandas库的DataFrame类型DataFrame初始化DataFrame查看数据3.1.2 Pandas读取数据及数据操作行操作添加一行删除一行列操作增加一列删除一列通过标签选择数据条件选择3.1.3 数据清洗缺失值处理判断缺失值填充缺失值删除缺失值异常值处理3.1.4 数据保存3.2 Pandas操作3.2.1 数据格式转换3.1.2 排序单值排序多个值排序3.1.3基本统计分析描述性统计最值均值和中值方差和标准差求和相关系数、协方差计数数据替换3.1.4 数据透视基础形式多个索引 index[,]指定需要统计汇总的数据 values指定函数 aggfunc非数值处理 fill_value计算总合数据 marginsTrue对不同值执行不同函数透视表过滤按照多个索引来进行汇总3.1 Pandas基本介绍 Python Data Analysis Library或pandas是基于Numpy的一种工具该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型提供了高效地操作大型数据集所需要的工具。pandas提供了大量能使我们快速便捷的处理数据的函数和方法。 import pandas as pd import numpy as np3.1.1 Pandas的基本数据结构 pandas中有两种常用的基本结构 •Series 一维数组与Numpy中的一维array类似二者与Python基本的数据结构List也很相似。Series能保存不同种数据类型字符串、boolean值、数字等都能保存在Series种。 •DataFrame 二维的表格型数据结构很多功能与R种的data.frame类似。可以将DataFrame理解为Series的容器。 3.1.1.1 Pandas库的Series类型 一维Series可以用一维列表初始化 apd.Series([1,3,5,np.nan,6,5]) ##此处Series的S必须大写 print(a) 结果 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 5.0 dtype: float64默认的情况下Series的下标都是数字可以使用额外参数指定类型是统一的。 bpd.Series([1,3,5,np.nan,6,5],index[a,b,c,d,e,f]) print(b) 结果 a 1.0 b 3.0 c 5.0 d NaN e 6.0 f 5.0 dtype: float64索引——数据行标签 查看索引 a.index 结果 RangeIndex(start0, stop6, step1) ----------------------------------------------- b.index 结果 Index([a, b, c, d, e, f], dtypeobject)查看取值 a.values 结果 array([ 1., 3., 5., nan, 6., 5.]) ------------------------------ a[0] 结果 1.0切片 a[2:5] 结果 2 5.0 3 NaN 4 6.0 dtype: float64b[b:f:2] ## 经过多次实践发现自定义索引的确是包头包尾 结果 b 3.0 d NaN f 5.0 dtype: float64索引赋值 a.index.name索引 a 结果索引 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 5.0 dtype: float64和Series里面赋值一样 a.indexlist(abcdef) a 结果 a 1.0 b 3.0 c 5.0 d NaN e 6.0 f 5.0 dtype: float643.1.1.2 Pandas库的DataFrame类型 DataFrame初始化 DataFrame是个二维结构这里首先构造一组时间序列作为第一维的下标 datepd.date_range(20230312,periods6) print(date) 结果 DatetimeIndex([2023-03-12, 2023-03-13, 2023-03-14, 2023-03-15,2023-03-16, 2023-03-17],dtypedatetime64[ns], freqD)然后创建一个DataFream结构 dfpd.DataFrame(np.random.randn(6,4)) df ##默认使用0、1、2.。。作为索引index01230-1.4901251.298987-0.5433611.2219801-0.8497090.118608-0.9557150.1449802-0.599598-0.756037-1.795249-0.2824953-0.3325861.750622-1.493345-2.1000134-0.905893-0.254791-1.476728-0.0016515-1.121065-1.861881-0.5024200.523135 dfpd.DataFrame(np.random.randn(6,4),indexdate,columnslist(ABCD)) df ##index参数设置行索引columns参数设置列索引默认情况下不指定index和columns他们的值从0开始ABCD2023-03-120.443978-0.5682800.539422-1.8088152023-03-13-0.9419461.600655-0.165418-0.1433332023-03-140.0581861.299691-0.722582-0.2581702023-03-150.912441-1.347266-0.827097-1.1896252023-03-160.4271250.010411-0.3904111.1722772023-03-17-0.584286-0.4281190.5363051.327480 除了向DataFrame中传入二维数组我们也可以使用字典传入数据 df1pd.DataFrame({A:1,B:pd.Timestamp(20230312),C:pd.Series(1,indexlist(range(4)),dtypefloat),D:np.array([3]*4,dtypeint),E:pd.Categorical([test,train,test,train]),F:abc}) df1ABCDEF012023-03-121.03testabc112023-03-121.03trainabc212023-03-121.03testabc312023-03-121.03trainabc 字典的每个key代表一列其value可以是各种能够转化为Series的对象 与Series要求所有的类型都一致不同DataFrame只要求每一列数据的格式相同 df1.dtypes 结果 A int64 B datetime64[ns] C float64 D int32 E category F object dtype: objectDataFrame查看数据 头尾数据 head和tail方法可以分别查看最前面几行和最后面几行的数据默认为5 df.head()ABCD2023-03-120.443978-0.5682800.539422-1.8088152023-03-13-0.9419461.600655-0.165418-0.1433332023-03-140.0581861.299691-0.722582-0.2581702023-03-150.912441-1.347266-0.827097-1.1896252023-03-160.4271250.010411-0.3904111.172277 df.tail(3) ##后三行ABCD2023-03-150.912441-1.347266-0.827097-1.1896252023-03-160.4271250.010411-0.3904111.1722772023-03-17-0.584286-0.4281190.5363051.327480下标、列标、数据下标使用index属性查看 df.index 结果 DatetimeIndex([2020-01-01, 2020-01-02, 2020-01-03, 2020-01-04,2020-01-05, 2020-01-06],dtypedatetime64[ns], freqD)列标使用columns属性查看 df.columns 结果 Index([A, B, C, D], dtypeobject)数据值使用values查看 df.values 结果 array([[ 0.44397794, -0.56828038, 0.53942245, -1.8088147 ],[-0.94194603, 1.60065473, -0.16541752, -0.14333282],[ 0.05818642, 1.2996908 , -0.72258188, -0.25816996],[ 0.91244089, -1.34726583, -0.82709665, -1.18962492],[ 0.42712501, 0.01041125, -0.39041139, 1.17227685],[-0.58428589, -0.42811927, 0.53630517, 1.32747977]])3.1.2 Pandas读取数据及数据操作 以豆瓣的电影数据作为我们深入了解Pandas的示例 豆瓣电影数据提取码7tvl df_mvpd.read_excel(.....) ## 括号中填写数据存放的位置 df_mvpd.read_excel(豆瓣电影数据.xlsx) ## 直接填文件名需要文件在当前目录下 df_mvpd.read_excel(rE:\数据分析与挖掘\date\豆瓣电影数据.xlsx) ## 这种情况需要在地址前加r以便转义失效 df_mv.head()Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点00肖申克的救赎692795.0剧情/犯罪美国1994-09-10 00:00:0014219949.6多伦多电影节11控方证人42995.0剧情/悬疑/犯罪美国1957-12-17 00:00:0011619579.5美国22美丽人生327855.0剧情/喜剧/爱情意大利1997-12-20 00:00:0011619979.5意大利33阿甘正传580897.0剧情/爱情美国1994-06-23 00:00:0014219949.4洛杉矶首映44霸王别姬478523.0剧情/爱情/同性中国大陆1993-01-01 00:00:0017119939.4香港 行操作 df_mv.iloc[0] 结果 Unnamed: 0 0 名字 肖申克的救赎 投票人数 692795 类型 剧情/犯罪 产地 美国 上映时间 1994-09-10 00:00:00 时长 142 年代 1994 评分 9.6 首映地点 多伦多电影节 Name: 0, dtype: objectdf_mv.iloc[0:5] ## 左闭右开Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点00肖申克的救赎692795.0剧情/犯罪美国1994-09-10 00:00:0014219949.6多伦多电影节11控方证人42995.0剧情/悬疑/犯罪美国1957-12-17 00:00:0011619579.5美国22美丽人生327855.0剧情/喜剧/爱情意大利1997-12-20 00:00:0011619979.5意大利33阿甘正传580897.0剧情/爱情美国1994-06-23 00:00:0014219949.4洛杉矶首映44霸王别姬478523.0剧情/爱情/同性中国大陆1993-01-01 00:00:0017119939.4香港 也可以使用 loc df_mv.loc[0:5] ## 两边都包Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点00肖申克的救赎692795.0剧情/犯罪美国1994-09-10 00:00:0014219949.6多伦多电影节11控方证人42995.0剧情/悬疑/犯罪美国1957-12-17 00:00:0011619579.5美国22美丽人生327855.0剧情/喜剧/爱情意大利1997-12-20 00:00:0011619979.5意大利33阿甘正传580897.0剧情/爱情美国1994-06-23 00:00:0014219949.4洛杉矶首映44霸王别姬478523.0剧情/爱情/同性中国大陆1993-01-01 00:00:0017119939.4香港55泰坦尼克号157074.0剧情/爱情/灾难美国2012-04-10 00:00:0019420129.4中国大陆 添加一行 dit{名字:复仇者联盟3,投票人数:123456,类型:剧情/科幻,产地:美国,上映时间:2017-05-04 00:00:00,时长:142,年代:2017,评分:8.7,首映地点:美国} spd.Series(dit) s.name38738 s名字 复仇者联盟3 投票人数 123456 类型 剧情/科幻 产地 美国 上映时间 2017-05-04 00:00:00 时长 142 年代 2017 评分 8.7 首映地点 美国 Name: 38738, dtype: objectdf_mvdf_mv.append(s) df_mv.tail()Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点3873438734.01935年57.0喜剧/歌舞美国1935-03-15 00:00:009819357.6美国3873538735.0血溅画屏95.0剧情/悬疑/犯罪/武侠/古装中国大陆1905-06-08 00:00:009119867.1美国3873638736.0魔窟中的幻想51.0惊悚/恐怖/儿童中国大陆1905-06-08 00:00:007819868.0美国3873738737.0列宁格勒围困之星火战役 Блокада: Фильм 2: Ленинградский ме…32.0剧情/战争苏联1905-05-30 00:00:009719776.6美国38738NaN复仇者联盟3123456.0剧情/科幻美国2017-05-04 00:00:0014220178.7美国 删除一行 df_mvdf_mv.drop([38738]) df_mv.tail()Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点3873338733.0神学院 S46.0Adult法国1905-06-05 00:00:005819838.6美国3873438734.01935年57.0喜剧/歌舞美国1935-03-15 00:00:009819357.6美国3873538735.0血溅画屏95.0剧情/悬疑/犯罪/武侠/古装中国大陆1905-06-08 00:00:009119867.1美国3873638736.0魔窟中的幻想51.0惊悚/恐怖/儿童中国大陆1905-06-08 00:00:007819868.0美国3873738737.0列宁格勒围困之星火战役 Блокада: Фильм 2: Ленинградский ме…32.0剧情/战争苏联1905-05-30 00:00:009719776.6美国 列操作 df_mv.columnsIndex([Unnamed: 0, 名字, 投票人数, 类型, 产地, 上映时间, 时长, 年代, 评分,首映地点],dtypeobject)df_mv[名字][0:5]0 肖申克的救赎 1 控方证人 2 美丽人生 3 阿甘正传 4 霸王别姬 Name: 名字, dtype: objectdf_mv[[名字,类型]][:5]名字类型0肖申克的救赎剧情/犯罪1控方证人剧情/悬疑/犯罪2美丽人生剧情/喜剧/爱情3阿甘正传剧情/爱情4霸王别姬剧情/爱情/同性 增加一列 df_mv[序号]range(1,len(df_mv)1) df_mv.head()Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点序号00.0肖申克的救赎692795.0剧情/犯罪美国1994-09-10 00:00:0014219949.6多伦多电影节111.0控方证人42995.0剧情/悬疑/犯罪美国1957-12-17 00:00:0011619579.5美国222.0美丽人生327855.0剧情/喜剧/爱情意大利1997-12-20 00:00:0011619979.5意大利333.0阿甘正传580897.0剧情/爱情美国1994-06-23 00:00:0014219949.4洛杉矶首映444.0霸王别姬478523.0剧情/爱情/同性中国大陆1993-01-01 00:00:0017119939.4香港5 删除一列 df_mvdf_mv.drop(序号,axis1) ## axis 1 代表列方向 df_mv.head()Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点00.0肖申克的救赎692795.0剧情/犯罪美国1994-09-10 00:00:0014219949.6多伦多电影节11.0控方证人42995.0剧情/悬疑/犯罪美国1957-12-17 00:00:0011619579.5美国22.0美丽人生327855.0剧情/喜剧/爱情意大利1997-12-20 00:00:0011619979.5意大利33.0阿甘正传580897.0剧情/爱情美国1994-06-23 00:00:0014219949.4洛杉矶首映44.0霸王别姬478523.0剧情/爱情/同性中国大陆1993-01-01 00:00:0017119939.4香港 通过标签选择数据 df.loc[[index],[column]]通过标签选择数据 df_mv.loc[[1,3,4],[名字,评分]]名字评分1控方证人9.53阿甘正传9.44霸王别姬9.4 df_mv.loc[1,名字]控方证人条件选择 选取产地为美国的所有电音 df_mv[df_mv[产地]中国大陆][:5]Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点44.0霸王别姬478523.0剧情/爱情/同性中国大陆1993-01-01 00:00:0017119939.4香港2121.0大闹天宫74881.0动画/奇幻中国大陆1905-05-14 00:00:0011419619.2上集2929.0穹顶之下51113.0纪录片中国大陆2015-02-28 00:00:0010420159.2中国大陆3838.0茶馆10678.0剧情/历史中国大陆1905-06-04 00:00:0011819829.2美国4545.0山水情10781.0动画/短片中国大陆1905-06-10 00:00:001919889.2美国 选取产地为美国且评分大于9的电影 df_mv[(df_mv.产地美国)(df_mv.评分9)].head() 或者-------------------------------------------- df[(df[产地]美国)(df[评分]9)].head()Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点00.0肖申克的救赎692795.0剧情/犯罪美国1994-09-10 00:00:0014219949.6多伦多电影节11.0控方证人42995.0剧情/悬疑/犯罪美国1957-12-17 00:00:0011619579.5美国33.0阿甘正传580897.0剧情/爱情美国1994-06-23 00:00:0014219949.4洛杉矶首映55.0泰坦尼克号157074.0剧情/爱情/灾难美国2012-04-10 00:00:0019420129.4中国大陆66.0辛德勒的名单306904.0剧情/历史/战争美国1993-11-30 00:00:0019519939.4华盛顿首映 选取产地为美国或中国大陆且评分大于9的电影 df_mv[((df_mv.产地美国)|(df_mv.产地中国大陆))(df_mv.评分9)].head()Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点00.0肖申克的救赎692795.0剧情/犯罪美国1994-09-10 00:00:0014219949.6多伦多电影节11.0控方证人42995.0剧情/悬疑/犯罪美国1957-12-17 00:00:0011619579.5美国33.0阿甘正传580897.0剧情/爱情美国1994-06-23 00:00:0014219949.4洛杉矶首映44.0霸王别姬478523.0剧情/爱情/同性中国大陆1993-01-01 00:00:0017119939.4香港55.0泰坦尼克号157074.0剧情/爱情/灾难美国2012-04-10 00:00:0019420129.4中国大陆 3.1.3 数据清洗 缺失值处理 dropna根据标签中的缺失值进行过滤删除缺失值 fillna对缺失值进行填充 isnull返回一个布尔值对象判断哪些值是缺失值 notnullisnull的否定式 判断缺失值 df_mv[df_mv[名字].isnull()].head() 或者------------------------------------- df[df.名字.isnull()].head()Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点231231.0NaN144.0纪录片/音乐韩国2011-02-02 00:00:009020119.7美国361361.0NaN80.0短片其他1905-05-17 00:00:00419645.7美国369369.0NaN5315.0剧情日本2004-07-10 00:00:0011120047.5日本372372.0NaN263.0短片/音乐英国1998-06-30 00:00:003419989.2美国374374.0NaN47.0短片其他1905-05-17 00:00:00319646.7美国 填充缺失值 填充字符类 df_mv[df_mv[名字].isnull()].head()Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点231231.0NaN144.0纪录片/音乐韩国2011-02-02 00:00:009020119.7美国361361.0NaN80.0短片其他1905-05-17 00:00:00419645.7美国369369.0NaN5315.0剧情日本2004-07-10 00:00:0011120047.5日本372372.0NaN263.0短片/音乐英国1998-06-30 00:00:003419989.2美国374374.0NaN47.0短片其他1905-05-17 00:00:00319646.7美国 df_mv[名字].fillna(未知电影,inplaceTrue) df_mv[df_mv[名字].isnull()].head()Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点 填充数值类 ##添加一行用于实验。此处设置评分为空nan dit{名字:复仇者联盟3,投票人数:123456,类型:剧情/科幻,产地:美国,上映时间:2017-05-04 00:00:00,时长:142,年代:2017,评分:np.nan,首映地点:美国} spd.Series(dit) s.name38738 df_mvdf_mv.append(s)##判断“评分”为空的 df_mv[df_mv[评分].isnull()].head()Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点38738NaN复仇者联盟3123456.0剧情/科幻美国2017-05-04 00:00:001422017NaN美国 ##填充评分此处填充 均值 df_mv[评分].fillna(np.mean(df_mv[评分]),inplaceTrue) df_mv[-1:]Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点38738NaN复仇者联盟3123456.0剧情/科幻美国2017-05-04 00:00:0014220176.935704美国 删除缺失值 df.dropna(参数) subset[‘列名’]删除该列为空的行 how‘all’删除全为空值的行或列 inplaceTrue覆盖之前的数据 axis0选择行或列0删除一行1删除一列默认为0 len(df_mv)38739df_mv1df_mv.dropna() len(df_mv1) len(df_mv) ## 值未变因为未设置inplaceTrue38735 38739异常值处理 异常值即在数据集中存在不合理的值又称离群点。比如年龄为-1笔记本电脑重量为1吨等等都属与异常值的范围。 对于异常值一般来说数量都会很少在不影响整体数据分布的情况下我们直接删除就可以了。 df_mv[(df_mv.投票人数0)|(df_mv[投票人数]%1!0)]Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点1977719777.0皇家大贼 皇家大-80.00剧情/犯罪中国香港1985-05-31 00:00:006019856.3美国1978619786.0日本的垃圾去中国大陆 にっぽんの“ゴミ” 大陆へ渡る 中国式リサイクル錬-80.00纪录片日本1905-06-26 00:00:006020047.9美国1979119791.0女教师 女教8.30剧情/犯罪日本1977-10-29 00:00:0010019776.6日本1979719797.0女教徒-118.00剧情法国1966-05-06 00:00:0013519667.8美国1980419804.0女郎漫游仙境 ドレミファ娘の血は騒5.90喜剧/歌舞日本1985-11-03 00:00:008019856.7日本1982019820.0女仆日记12.87剧情法国2015-04-01 00:00:009620155.7法国3805538055.0逃出亚卡拉12.87剧情/动作/惊悚/犯罪美国1979-09-20 00:00:0011219797.8美国 df.drop(df[(df.投票人数0)|(df_mv[投票人数]%1!0)].index,inplace True) 或者 dfdf[(df.投票人数0)|(df_mv[投票人数]%10)]3.1.4 数据保存 数据处理之后然后将数据重新保存 df_mv.to_excel(movie_data.xlsx) ## 未指定目录地址默认存到当前目录下3.2 Pandas操作 import pandas as pd import numpy as np以豆瓣电影为例 dfpd.read_excel(movie_data.xlsx) dfdf.drop(Unnamed: 0,axis1) df.head()名字投票人数类型产地上映时间时长年代评分首映地点0肖申克的救赎692795.0剧情/犯罪美国1994-09-10 00:00:0014219949.6多伦多电影节1控方证人42995.0剧情/悬疑/犯罪美国1957-12-17 00:00:0011619579.5美国2美丽人生327855.0剧情/喜剧/爱情意大利1997-12-20 00:00:0011619979.5意大利3阿甘正传580897.0剧情/爱情美国1994-06-23 00:00:0014219949.4洛杉矶首映4霸王别姬478523.0剧情/爱情/同性中国大陆1993-01-01 00:00:0017119939.4香港 3.2.1 数据格式转换 查看格式 df[投票人数].dtypedtype(float64)格式转化 df[投票人数]df[投票人数].astype(int) df[投票人数].dtypedtype(int32)将年代格式转化为整型 df[年代].dtypedtype(O)df[年代]df[年代].astype(int) ------------------------------------------------------------------------ 报错 --- --------------------------------------------------------------------------- ValueError Traceback (most recent call last) ~\AppData\Local\Temp\ipykernel_21876\765820658.py in module ---- 1 df[年代]df[年代].astype(int)D:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py in astype(self, dtype, copy, errors)5910 else:5911 # else, only a single dtype is given - 5912 new_data self._mgr.astype(dtypedtype, copycopy, errorserrors)5913 return self._constructor(new_data).__finalize__(self, methodastype)5914 D:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\managers.py in astype(self, dtype, copy, errors)417 418 def astype(self: T, dtype, copy: bool False, errors: str raise) - T: -- 419 return self.apply(astype, dtypedtype, copycopy, errorserrors)420 421 def convert(D:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\managers.py in apply(self, f, align_keys, ignore_failures, **kwargs)302 applied b.apply(f, **kwargs)303 else: -- 304 applied getattr(b, f)(**kwargs)305 except (TypeError, NotImplementedError):306 if not ignore_failures:D:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\blocks.py in astype(self, dtype, copy, errors)578 values self.values579 -- 580 new_values astype_array_safe(values, dtype, copycopy, errorserrors)581 582 new_values maybe_coerce_values(new_values)D:\ProgramData\Anaconda3\lib\site-packages\pandas\core\dtypes\cast.py in astype_array_safe(values, dtype, copy, errors)1290 1291 try: - 1292 new_values astype_array(values, dtype, copycopy)1293 except (ValueError, TypeError):1294 # e.g. astype_nansafe can fail on object-dtype of stringsD:\ProgramData\Anaconda3\lib\site-packages\pandas\core\dtypes\cast.py in astype_array(values, dtype, copy)1235 1236 else: - 1237 values astype_nansafe(values, dtype, copycopy)1238 1239 # in pandas we dont store numpy str dtypes, so convert to objectD:\ProgramData\Anaconda3\lib\site-packages\pandas\core\dtypes\cast.py in astype_nansafe(arr, dtype, copy, skipna)1152 # work around NumPy brokenness, #19871153 if np.issubdtype(dtype.type, np.integer): - 1154 return lib.astype_intsafe(arr, dtype)1155 1156 # if we have a datetime/timedelta array of objectsD:\ProgramData\Anaconda3\lib\site-packages\pandas\_libs\lib.pyx in pandas._libs.lib.astype_intsafe()ValueError: invalid literal for int() with base 10: 2008\u200e##年代中有异常值 2008\u200e无法正常转化 df[df.年代2008\u200e] 名字投票人数类型产地上映时间时长年代评分首映地点15205狂蟒惊魂544恐怖中国大陆2008-04-08 00:00:00932008‎2.7美国 df[df.年代2008\u200e][年代].values ## 从整行返回的结果并不能直接看出异常所以调用valus直接查看array([2008\u200e], dtypeobject)df.loc[15205,年代]2008 df.loc[15205]名字 狂蟒惊魂 投票人数 544 类型 恐怖 产地 中国大陆 上映时间 2008-04-08 00:00:00 时长 93 年代 2008 评分 2.7 首映地点 美国 Name: 15205, dtype: objectdf[年代]df[年代].astype(int) df[年代][:5]0 1994 1 1957 2 1997 3 1994 4 1993 Name: 年代, dtype: int32将时长转化为整数格式 df[时长]df[时长].astype(int) --------------------------------------------------------------------------- 报错 --------------------------------------------------------------------------- ValueError Traceback (most recent call last) ~\AppData\Local\Temp\ipykernel_21876\3003640607.py in module ---- 1 df[时长]df[时长].astype(int)D:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py in astype(self, dtype, copy, errors)5910 else:5911 # else, only a single dtype is given - 5912 new_data self._mgr.astype(dtypedtype, copycopy, errorserrors)5913 return self._constructor(new_data).__finalize__(self, methodastype)5914 D:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\managers.py in astype(self, dtype, copy, errors)417 418 def astype(self: T, dtype, copy: bool False, errors: str raise) - T: -- 419 return self.apply(astype, dtypedtype, copycopy, errorserrors)420 421 def convert(D:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\managers.py in apply(self, f, align_keys, ignore_failures, **kwargs)302 applied b.apply(f, **kwargs)303 else: -- 304 applied getattr(b, f)(**kwargs)305 except (TypeError, NotImplementedError):306 if not ignore_failures:D:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\blocks.py in astype(self, dtype, copy, errors)578 values self.values579 -- 580 new_values astype_array_safe(values, dtype, copycopy, errorserrors)581 582 new_values maybe_coerce_values(new_values)D:\ProgramData\Anaconda3\lib\site-packages\pandas\core\dtypes\cast.py in astype_array_safe(values, dtype, copy, errors)1290 1291 try: - 1292 new_values astype_array(values, dtype, copycopy)1293 except (ValueError, TypeError):1294 # e.g. astype_nansafe can fail on object-dtype of stringsD:\ProgramData\Anaconda3\lib\site-packages\pandas\core\dtypes\cast.py in astype_array(values, dtype, copy)1235 1236 else: - 1237 values astype_nansafe(values, dtype, copycopy)1238 1239 # in pandas we dont store numpy str dtypes, so convert to objectD:\ProgramData\Anaconda3\lib\site-packages\pandas\core\dtypes\cast.py in astype_nansafe(arr, dtype, copy, skipna)1152 # work around NumPy brokenness, #19871153 if np.issubdtype(dtype.type, np.integer): - 1154 return lib.astype_intsafe(arr, dtype)1155 1156 # if we have a datetime/timedelta array of objectsD:\ProgramData\Anaconda3\lib\site-packages\pandas\_libs\lib.pyx in pandas._libs.lib.astype_intsafe()ValueError: invalid literal for int() with base 10: 8Udf[df.时长8U]名字投票人数类型产地上映时间时长年代评分首映地点31644一个被隔绝的世界46纪录片/短片瑞典2001-10-25 00:00:008U19487.8美国 df.drop(31644,inplaceTrue)df[时长]df[时长].astype(int) --------------------------------------------------------------------------- --------------------------------------------------------------------------- ValueError Traceback (most recent call last) ~\AppData\Local\Temp\ipykernel_21876\3003640607.py in module ---- 1 df[时长]df[时长].astype(int)D:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py in astype(self, dtype, copy, errors)5910 else:5911 # else, only a single dtype is given - 5912 new_data self._mgr.astype(dtypedtype, copycopy, errorserrors)5913 return self._constructor(new_data).__finalize__(self, methodastype)5914 D:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\managers.py in astype(self, dtype, copy, errors)417 418 def astype(self: T, dtype, copy: bool False, errors: str raise) - T: -- 419 return self.apply(astype, dtypedtype, copycopy, errorserrors)420 421 def convert(D:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\managers.py in apply(self, f, align_keys, ignore_failures, **kwargs)302 applied b.apply(f, **kwargs)303 else: -- 304 applied getattr(b, f)(**kwargs)305 except (TypeError, NotImplementedError):306 if not ignore_failures:D:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\blocks.py in astype(self, dtype, copy, errors)578 values self.values579 -- 580 new_values astype_array_safe(values, dtype, copycopy, errorserrors)581 582 new_values maybe_coerce_values(new_values)D:\ProgramData\Anaconda3\lib\site-packages\pandas\core\dtypes\cast.py in astype_array_safe(values, dtype, copy, errors)1290 1291 try: - 1292 new_values astype_array(values, dtype, copycopy)1293 except (ValueError, TypeError):1294 # e.g. astype_nansafe can fail on object-dtype of stringsD:\ProgramData\Anaconda3\lib\site-packages\pandas\core\dtypes\cast.py in astype_array(values, dtype, copy)1235 1236 else: - 1237 values astype_nansafe(values, dtype, copycopy)1238 1239 # in pandas we dont store numpy str dtypes, so convert to objectD:\ProgramData\Anaconda3\lib\site-packages\pandas\core\dtypes\cast.py in astype_nansafe(arr, dtype, copy, skipna)1152 # work around NumPy brokenness, #19871153 if np.issubdtype(dtype.type, np.integer): - 1154 return lib.astype_intsafe(arr, dtype)1155 1156 # if we have a datetime/timedelta array of objectsD:\ProgramData\Anaconda3\lib\site-packages\pandas\_libs\lib.pyx in pandas._libs.lib.astype_intsafe()ValueError: invalid literal for int() with base 10: 12Jdf[df.时长12J]名字投票人数类型产地上映时间时长年代评分首映地点32949渔业危机41纪录片英国2009-06-19 00:00:0012J20088.2USA df.drop(32949,inplaceTrue)df[时长]df[时长].astype(int) df[时长][:5]0 142 1 116 2 116 3 142 4 171 Name: 时长, dtype: int323.1.2 排序 单值排序 默认排序 df[:10] ##根据index进行排序名字投票人数类型产地上映时间时长年代评分首映地点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香港5泰坦尼克号157074剧情/爱情/灾难美国2012-04-10 00:00:0019420129.4中国大陆6辛德勒的名单306904剧情/历史/战争美国1993-11-30 00:00:0019519939.4华盛顿首映7新世纪福音战士剧场版Air/真心为你 新世紀エヴァンゲリオン劇場版 Ai24355剧情/动作/科幻/动画/奇幻日本1997-07-19 00:00:008719979.4日本8银魂完结篇直到永远的万事屋 劇場版 銀魂 完結篇 万事屋よ21513剧情/动画日本2013-07-06 00:00:0011020139.4日本9这个杀手不太冷662552剧情/动作/犯罪法国1994-09-14 00:00:0013319949.4法国 按照投票人数进行排序 ## 默认升序排列 df.sort_values(by投票人数)[:5]名字投票人数类型产地上映时间时长年代评分首映地点19797女教徒-118剧情法国1966-05-06 00:00:0013519667.8美国19777皇家大贼 皇家大-80剧情/犯罪中国香港1985-05-31 00:00:006019856.3美国19786日本的垃圾去中国大陆 にっぽんの“ゴミ” 大陆へ渡る 中国式リサイクル錬-80纪录片日本1905-06-26 00:00:006020047.9美国19804女郎漫游仙境 ドレミファ娘の血は騒5喜剧/歌舞日本1985-11-03 00:00:008019856.7日本19791女教师 女教8剧情/犯罪日本1977-10-29 00:00:0010019776.6日本 ## 降序排列 df.sort_values(by投票人数,ascendingFalse)[:5]名字投票人数类型产地上映时间时长年代评分首映地点0肖申克的救赎692795剧情/犯罪美国1994-09-10 00:00:0014219949.6多伦多电影节9这个杀手不太冷662552剧情/动作/犯罪法国1994-09-14 00:00:0013319949.4法国22盗梦空间642134剧情/动作/科幻/悬疑/冒险美国2010-09-01 00:00:0014820109.2中国大陆3阿甘正传580897剧情/爱情美国1994-06-23 00:00:0014219949.4洛杉矶首映99三傻大闹宝莱坞549808剧情/喜剧/爱情/歌舞印度2011-12-08 00:00:0017120099.1中国大陆 按照年代进行排序 df.sort_values(by年代)[:5]名字投票人数类型产地上映时间时长年代评分首映地点14048利兹大桥126短片英国1888-106018887.2美国1700朗德海花园场景650短片英国1888-10-146018888.7美国26170恶作剧51短片美国1905-03-04 00:00:006018904.8美国10627可怜的比埃洛176喜剧/爱情/动画/短片法国1892-10-286018927.5法国14455迪克森实验音膜121短片美国1905-03-08 00:00:006018947.2美国 多个值排序 先按照评分排序再按照投票人数排序(皆为降序排序) df.sort_values(by[评分,投票人数],ascendingFalse)[:5]名字投票人数类型产地上映时间时长年代评分首映地点9278平安结祈 平安結208音乐日本2012-02-24 00:00:006020129.9美国13882武之舞128纪录片中国大陆1997-02-01 00:00:0060349439.9美国1110未知电影76科幻/纪录片美国1905-06-23 00:00:007520019.9美国23559未作回答的问题伯恩斯坦哈佛六讲61纪录片美国1905-05-29 00:00:006019739.9美国35470未知电影46纪录片/音乐韩国2013-10-31 00:00:009020139.9韩国——————————————————————————————————————————————————————————————————————————————————————先按照评分排序降序再按照投票人数排序(升序) df.sort_values(by[评分,投票人数],ascending[False,True])[:5]名字投票人数类型产地上映时间时长年代评分首映地点25270索科洛夫巴黎现场43音乐法国2002-11-04 00:00:0012720029.9美国35465未知电影46纪录片/音乐韩国2013-10-31 00:00:009020139.9韩国23556未作回答的问题伯恩斯坦哈佛六讲61纪录片美国1905-05-29 00:00:006019739.9美国1110未知电影76科幻/纪录片美国1905-06-23 00:00:007520019.9美国9278平安结祈 平安結208音乐日本2012-02-24 00:00:006020129.9美国 3.1.3基本统计分析 描述性统计 dataframe.describe()对dataframe中的数值数据进行描述性统计 df.describe()投票人数时长年代评分count38737.00000038737.00000038737.00000038737.000000mean6189.17809889.0531281998.7890916.935649std26150.60777783.333528253.1954931.270094min-118.0000001.0000001888.0000002.00000025%98.00000060.0000001990.0000006.30000050%341.00000092.0000002005.0000007.10000075%1741.000000106.0000002010.0000007.800000max692795.00000011500.00000039180.0000009.900000通过描述性统计可以发现一些异常值很多异常值往往是需要我们逐步去发现的。 df[df.年代2023]名字投票人数类型产地上映时间时长年代评分首映地点13882武之舞128纪录片中国大陆1997-02-01 00:00:0060349439.9美国17115妈妈回来吧-中国打工村的孩子49纪录片日本2007-04-08 00:00:00109391808.9美国 df[df.时长1000]名字投票人数类型产地上映时间时长年代评分首映地点19690怒海余生54剧情/家庭/冒险美国1937-09-01 00:00:001150019377.9美国38730喧闹村的孩子们36家庭瑞典1986-12-06 00:00:00920019868.7瑞典 df.drop(df[df.年代2023].index,inplaceTrue) df.drop(df[df.时长1000].index,inplaceTrue) df.describe()投票人数时长年代评分count38730.00000038730.00000038730.00000038730.000000mean6190.29700588.5238061996.9814616.935420std26152.83845937.94615619.9346571.270018min5.0000001.0000001888.0000002.00000025%98.00000060.0000001990.0000006.30000050%341.00000092.0000002005.0000007.10000075%1741.000000106.0000002010.0000007.800000max692795.000000958.0000002017.0000009.900000 ##删除 行 后重新分配 索引index df.indexrange(len(df))最值 df[投票人数].max()692795df[投票人数].min()5均值和中值 df[投票人数].mean()6190.297004905758df[投票人数].median()341.0方差和标准差 df[评分].var()1.6129445680877672df[评分].std()1.2700175463700363求和 df[投票人数].sum()239750203相关系数、协方差 ## 相关性 df[[投票人数,评分]].corr()投票人数评分投票人数1.0000000.122925评分0.1229251.000000 ## 协方差 df[[投票人数,评分]].cov()投票人数评分投票人数6.839710e084082.897271评分4.082897e031.612945 计数 len(df) len(df[df.产地美国]) df.count()数据替换 len(df)38166## 某列的所有取值 df[产地].unique()array([美国, 意大利, 中国大陆, 日本, 法国, 英国, 韩国, 中国香港, 阿根廷, 德国,印度, 其他, 加拿大, 波兰, 泰国, 澳大利亚, 西班牙, 俄罗斯, 中国台湾, 荷兰,丹麦, 比利时, USA, 苏联, 墨西哥, 巴西, 瑞典, 西德], dtypeobject)len(df[产地].unique())28产地中包含了一些重复数据比如美国和USA德国和西德俄罗斯和苏联 我们可以通过数据替换的方法将这些相同的国家的电影数据合并一下 df[产地].replace(USA,美国,inplaceTrue) ## USA-美国 df[产地].replace([西德,苏联],[德国,俄罗斯],inplaceTrue) ## 西德-德国苏联-俄罗斯 len(df[产地].unique())25计算每一年代电影的数量 df[年代].value_counts()[:10] ## 已经自动排序2012 2018 2013 1977 2008 1926 2014 1867 2010 1863 2011 1845 2009 1837 2007 1685 2015 1570 2006 1488 Name: 年代, dtype: int64电影产出前5位的国家或地区 df[产地].value_counts()[:5]美国 11979 日本 5051 中国大陆 3802 中国香港 2851 法国 2816 Name: 产地, dtype: int64df.to_excel(movie_data2.xlsx)3.1.4 数据透视 Pandas提供了一个数据透视表功能名为pivot_table。 使用pivot_table的一个挑战是你需要确保你理解你的数据并清楚的知道你通过透视表解决了什么问题虽然pivot_table看起来知识一个简单的函数但是它能够快速的对数据进行强大的分析。 基础形式 ## 前面在未设置查看行数时中间数据是用...代替下面代码可设置显示长度 pd.set_option(max_columns,100) ##设置显示的最大列 pd.set_option(max_rows,500) ##设置显示的最大行pd.pivot_table(df,index[年代]) ## 未设置其他参数默认均值计算投票人数时长评分年代1888388.00000060.0000007.950000189051.00000060.0000004.8000001892176.00000060.0000007.5000001894112.66666760.0000006.6333331895959.87500060.0000007.5750001896984.25000060.0000007.037500189767.00000060.0000006.6333331898578.50000060.0000007.450000189971.0000009.5000006.9000001900175.28571436.7142867.2285711901164.50000047.2500007.25000019021934.16666734.6666677.4833331903295.62500029.6250006.9687501904195.87500041.2500007.2125001905332.60000043.8000006.8200001906189.85714330.5714297.3428571907213.60000031.8000007.0200001908258.83333334.1666677.150000190958.60000020.6000007.5600001910105.20000041.8000006.9400001911240.00000025.7500007.3750001912152.20000016.4000007.920000191366.12500057.7500006.8625001914104.92307725.9230776.4730771915314.90000056.8000007.2600001916613.66666743.8333337.7583331917124.41666731.3333337.0750001918357.08333335.1666677.2000001919179.85000062.4000007.4900001920636.50000059.3571437.4928571921729.81818257.3636367.7500001922767.09090966.3636367.8045451923426.00000074.0555567.8833331924371.78571481.1785718.05357119251104.28000084.4400007.7880001926443.60869680.3043487.7739131927695.27586287.2413797.7517241928404.82500071.7750007.9450001929740.54285769.3714297.4400001930555.08000074.1600007.36000019311468.66666778.5238107.4833331932600.08108177.5405417.2945951933729.72000076.3600007.4300001934776.49019683.1960787.5196081935887.69565273.6739137.51521719361465.46666776.2666677.63500019371580.22449085.5102047.5755101938552.00000085.9736847.73684219395911.85714397.3877557.52040819405548.74359092.8205137.57179519411552.80851189.1276607.42766019422607.75471778.2641517.5547171943742.84210578.4561407.61578919441007.37037081.9259267.5388891945989.02040886.9591847.67346919461034.45762785.0169497.6067801947439.40000087.1200007.45333319481186.50574788.2068977.6574711949641.68539381.9887647.64606719502235.02631680.1578957.6552631951956.10126685.6329117.63670919521473.54023081.5287367.74367819534786.11363684.1704557.56704519542180.24509885.5490207.70294119551983.73913083.6695657.58000019561054.60544276.4081637.60000019572973.57943987.3551407.6523361958886.19672182.9754107.53688519591725.07031290.0703127.57187519601446.274809101.3129777.56946619613186.83333398.2156867.74411819621972.11888191.6153857.70489519631184.02797292.0209797.53636419641107.76373689.7142867.52307719651988.18404990.4785287.57607419661319.52514089.4860347.51899419671237.28977391.5909097.48465919681096.22093091.7441867.3174421969593.11111198.6666677.3700481970676.78947496.9736847.29105319711368.50684996.3150687.15570819722299.09661896.2898557.2681161973800.10328694.8826297.25023519741685.78923895.3183867.06233219752222.73979697.5663277.07142919761340.61802695.0557947.1077251977957.12727398.0318187.14818219781001.82089694.4676627.09651719791878.62114596.0000007.29603519802407.68303694.1785717.18660719811609.06204493.3211687.15729919822142.72932391.9849627.29736819831541.19133692.1696757.31010819842667.17346990.9183677.37517019851588.09657393.6168227.27850519862828.50617389.1450627.25679019873128.77551088.9387767.28454819884800.22762188.8593357.26572919892994.41730388.4580157.21068719904965.58778691.8829527.14910919914685.81951293.3707327.15463419925486.13333392.5724147.22367819938117.75963795.2698417.195692199411479.25506191.3441307.26234819958132.60531794.4417187.28936619965095.88394695.2437147.25880119978243.93854794.9702057.33016819987431.79029591.1317167.23830219997137.04960092.4576007.18800020005907.77017892.1915187.13406320018489.75724690.9589377.11014520026552.59333391.5844447.06977820037891.96424890.5583607.13775020048587.63259990.4246707.03136620056506.11084792.0807607.03000820067278.26072690.1445546.91471920076253.83752286.6282886.87510220086750.99694385.1441676.91064720098716.36466286.3845336.75000020109576.38759383.4342526.77036120118763.11039784.1259386.57701020127082.78746385.0999026.45837420137603.72313884.9020496.39260420147723.30259785.9978806.25977720157841.40829189.8636936.14196020167176.01938091.3294575.8682172017123456.000000142.0000006.935704 多个索引 index[‘’,‘’] 实际上大多数的pivot_table参数可以通过列表获取多个值 pd.set_option(max_columns,100) pd.set_option(max_rows,500) pd.pivot_table(df,index[年代,产地])投票人数时长评分年代产地1888英国388.00000060.0000007.9500001890美国51.00000060.0000004.8000001892法国176.00000060.0000007.5000001894法国148.00000060.0000007.000000美国95.00000060.0000006.450000……………2016法国39.00000093.2500007.475000美国10563.84848591.9848486.540909英国14607.27272785.5454557.200000韩国1739.850000106.1000005.7300002017美国123456.000000142.0000006.935704 1511 rows × 3 columns 指定需要统计汇总的数据 values pd.pivot_table(df,index[年代,产地],values[评分])评分年代产地1888英国7.9500001890美国4.8000001892法国7.5000001894法国7.000000美国6.450000………2016法国7.475000美国6.540909英国7.200000韩国5.7300002017美国6.935704 1511 rows × 1 columns 指定函数 aggfunc pd.pivot_table(df,index[年代,产地],values[投票人数],aggfuncnp.sum)投票人数年代产地1888英国7761890美国511892法国1761894法国148美国190………2016法国156美国697214英国160680韩国347972017美国123456 1511 rows × 1 columns 通过将“投票人数”和“评分”列进行对应分组对“产地”实现数据聚合和总结 pd.pivot_table(df,index[产地],values[投票人数,评分],aggfunc[np.sum,np.mean])summean投票人数评分投票人数评分产地中国台湾52374664367.2000008474.8640787.066667中国大陆4143531323058.00000010898.2937936.064703中国香港2328538918457.7000008167.4461596.474114丹麦3947841434.7000001993.8585867.245960俄罗斯316711011031.9000002098.8137847.310736其他305411913895.9000001590.6869797.237448加拿大13847654868.4000001915.3042886.733610印度11462712453.4000003210.8431376.872269墨西哥139613843.4000001173.2184877.087395巴西357136733.5000003536.0000007.262376意大利25022155377.3000003340.7409887.179306日本1800066736339.3000003563.7828157.194476比利时1709871003.3000001230.1223027.217986法国1021396620384.7000003627.1186087.238885波兰1595771347.000000881.6408847.441989泰国15648811796.1000005322.7244906.109184澳大利亚14157132093.4000004719.0433336.978000瑞典2900771423.3000001510.8177087.413021美国10192967283216.4357048509.0301366.946860英国1324956220789.4000004797.0897907.526937荷兰1448361114.500000934.4258067.190323西班牙14867333139.9000003326.0246097.024385阿根廷258271843.7000002226.4741387.273276韩国87610808596.4000006484.8852706.362990 非数值处理 fill_value 非数值NaN难以处理如果想移除他们可以使用 fill_value 将其设置为0 pd.pivot_table(df,index[产地],aggfunc[np.sum,np.mean],fill_value0)summean年代投票人数时长评分年代投票人数时长评分产地中国台湾12353885237466539254367.2000001999.0097098474.86407887.2572827.066667中国大陆76214884143531330960823058.0000002004.59968410898.29379381.4329306.064703中国香港56766272328538925243118457.7000001991.1003168167.44615988.5412146.474114丹麦395820394784174441434.7000001999.0909091993.85858688.1010107.245960俄罗斯3006734316711014076111031.9000001992.5341292098.81378493.2809817.310736其他3837588305411916716813895.9000001998.7437501590.68697987.0666677.237448加拿大14477801384765579194868.4000002002.4619641915.30428880.1092676.733610印度7161331146271432032453.4000002005.9747903210.843137121.0168076.872269墨西哥23714513961310929843.4000001992.8151261173.21848791.8403367.087395巴西2019873571368869733.5000001999.8712873536.00000087.8118817.262376意大利14871422502215779025377.3000001985.5033383340.740988104.0080117.179306日本101015051800066742786336339.3000001999.9020003563.78281584.7085737.194476比利时277930170987114471003.3000001999.4964031230.12230282.3525187.217986法国56088111021396625316920384.7000001991.7652703627.11860889.9037647.238885波兰359652159577146131347.0000001987.027624881.64088480.7348077.441989泰国5906841564881260021796.1000002009.1292525322.72449088.4421776.109184澳大利亚6008961415713255492093.4000002002.9866674719.04333385.1633336.978000瑞典381491290077178981423.3000001986.9322921510.81770893.2187507.413021美国23892986101929672107031083216.4357041994.5726698509.03013689.3488616.946860英国55149591324956224400520789.4000001996.7266474797.08979088.3435927.526937荷兰310199144836116851114.5000002001.283871934.42580675.3870977.190323西班牙8947101486733404553139.9000002001.5883673326.02460990.5033567.024385阿根廷23246825827110638843.7000002004.0344832226.47413891.7068977.273276韩国271296987610801347348596.4000002008.1191716484.88527099.7290906.362990 计算总合数据 marginsTrue pd.pivot_table(df,index[产地],aggfunc[np.sum,np.mean],fill_value0,marginsTrue)summean年代投票人数时长评分年代投票人数时长评分产地中国台湾12353885237466539254367.2000001999.0097098474.86407887.2572827.066667中国大陆76214884143531330960823058.0000002004.59968410898.29379381.4329306.064703中国香港56766272328538925243118457.7000001991.1003168167.44615988.5412146.474114丹麦395820394784174441434.7000001999.0909091993.85858688.1010107.245960俄罗斯3006734316711014076111031.9000001992.5341292098.81378493.2809817.310736其他3837588305411916716813895.9000001998.7437501590.68697987.0666677.237448加拿大14477801384765579194868.4000002002.4619641915.30428880.1092676.733610印度7161331146271432032453.4000002005.9747903210.843137121.0168076.872269墨西哥23714513961310929843.4000001992.8151261173.21848791.8403367.087395巴西2019873571368869733.5000001999.8712873536.00000087.8118817.262376意大利14871422502215779025377.3000001985.5033383340.740988104.0080117.179306日本101015051800066742786336339.3000001999.9020003563.78281584.7085737.194476比利时277930170987114471003.3000001999.4964031230.12230282.3525187.217986法国56088111021396625316920384.7000001991.7652703627.11860889.9037647.238885波兰359652159577146131347.0000001987.027624881.64088480.7348077.441989泰国5906841564881260021796.1000002009.1292525322.72449088.4421776.109184澳大利亚6008961415713255492093.4000002002.9866674719.04333385.1633336.978000瑞典381491290077178981423.3000001986.9322921510.81770893.2187507.413021美国23892986101929672107031083216.4357041994.5726698509.03013689.3488616.946860英国55149591324956224400520789.4000001996.7266474797.08979088.3435927.526937荷兰310199144836116851114.5000002001.283871934.42580675.3870977.190323西班牙8947101486733404553139.9000002001.5883673326.02460990.5033567.024385阿根廷23246825827110638843.7000002004.0344832226.47413891.7068977.273276韩国271296987610801347348596.4000002008.1191716484.88527099.7290906.362990All773371352397497313428380268585.6357041996.9823386190.76435088.5268686.935359 对不同值执行不同函数 可以向aggfunc传递一个字典。不过这样做有一个副作用那就是必须将标签做的更加简洁才性。 对各个产地的投票人数求和对评分求均值 pd.pivot_table(df,index[产地],values[投票人数,评分],aggfunc{投票人数:np.sum,评分:np.mean},fill_value0)投票人数评分产地中国台湾52374667.066667中国大陆414353136.064703中国香港232853896.474114丹麦3947847.245960俄罗斯31671107.310736其他30541197.237448加拿大13847656.733610印度11462716.872269墨西哥1396137.087395巴西3571367.262376意大利25022157.179306日本180006677.194476比利时1709877.217986法国102139667.238885波兰1595777.441989泰国15648816.109184澳大利亚14157136.978000瑞典2900777.413021美国1019296726.946860英国132495627.526937荷兰1448367.190323西班牙14867337.024385阿根廷2582717.273276韩国87610806.362990 透视表过滤 tablepd.pivot_table(df,index[年代],values[投票人数,评分],aggfunc{投票人数:np.sum,评分:np.mean},fill_value0) type(table)pandas.core.frame.DataFrametable[:5]投票人数评分年代18887767.9500001890514.80000018921767.50000018943386.633333189576797.575000 1994年被誉为电影史上伟大的一年但是通过数据我们可以发现1994年的平均分并不是很高。1924年的电影平均分最高。 table[table.index1994]投票人数评分年代199456707527.262348 table.sort_values(评分,ascendingFalse)[:10]投票人数评分年代1924104108.05357118887767.9500001928161937.94500019127617.920000192376687.8833331922168767.8045451925276077.7880001926102037.773913191673647.7583331927201637.751724 按照多个索引来进行汇总 pd.pivot_table(df,index[产地,年代],values[投票人数,评分],aggfunc{投票人数:np.sum,评分:np.mean},fill_value0)投票人数评分产地年代中国台湾19631216.40000019654616.8000001966517.900000196744448.00000019681787.400000…………韩国20126108296.064151201311309836.09819820144531525.65083320153498085.4238532016347975.730000 1511 rows × 2 columns