Python数据分析三剑客学习笔记Day4——pandas包的使用:数据格式转换,排序,基本统计分析及数据透视

本文详细介绍了Python数据分析的基础,包括numpy、pandas和matplotlib的使用,涉及数据格式转换、异常值处理、排序和统计分析。通过实例展示了如何进行数据透视和聚合,以及如何利用这些工具进行数据清洗和预处理。
摘要由CSDN通过智能技术生成

本文是视频Python数据分析三剑客 数学建模基础 numpy、pandas、matplotlib的学习笔记。
————————————————————————————————————————————————————

目录

数据格式转换

查看格式

df['投票人数'].dtype
dtype('float64')

修改格式

df['投票人数']=df['投票人数'].astype('int')
df[:5]

在这里插入图片描述

将年份转化为整数格式,异常值查找

df['年代']=df['年代'].astype('int')

发现报错,错误为

在这里插入图片描述
查找该位置

df[df['年代']=='2008\u200e']

在这里插入图片描述
将该位置的年代值修改:

df.loc[15205,'年代']=2008
df.loc[15205]

在这里插入图片描述
最后修改年代数据类型

df['年代']=df['年代'].astype('int')
df

将时长转化为整数格式

df['时长']=df['时长'].astype(int)

又发现报错,错误为
在这里插入图片描述
查找该位置

df[df['时长']== '12J']

在这里插入图片描述
因时长未知,故将其删除

df.drop([32949],inplace=True)

转换时长数据类型为int

df['时长']=df['时长'].astype(int)

操作成功

排序

默认排序

按照index进行排序

按照投票人数进行排序

默认根据从小到大进行排序

df.sort_values('投票人数')[:5]

在这里插入图片描述
增加参数ascending=False,使按照降序排序

df.sort_values('投票人数',ascending=False)[:5]

在这里插入图片描述

按照年代进行排序

df.sort_values(by='年代')[:5]

在这里插入图片描述

多个值进行排序,先按照评分,再按照投票人数

df.sort_values(by=['评分','投票人数'],ascending=False)

在这里插入图片描述

基本统计分析

描述性统计:

通过DataFrame.describe()函数对数值型数据进行描述性统计

df.describe()

在这里插入图片描述

通过描述性统计,可以发现异常值

df[df['年代']>2021]

在这里插入图片描述

df[df['时长']>1000]

在这里插入图片描述
删除异常值

df.drop(df[df['年代']>2018].index,inplace=True)
df.drop(df[df['时长']>1000].index,inplace=True)
df.describe()

在这里插入图片描述

对index重新赋值

删除值可能会造成部分位置为空,此时可对index重新赋值

df.index=range(len(df))

最值

df['投票人数'].max()
692795
df['投票人数'].min()
21

均值

df['投票人数'].mean()
6268.944054294849

中值

df['投票人数'].median()
354.0

方差和标准差(反映数据离散程度)

方差:

df['评分'].var()
1.596899503257773

标准差:

df['评分'].std()
1.2636848908085327

求和

df['投票人数'].sum()
239235443

相关系数

df[['投票人数','评分']].corr()

在这里插入图片描述

协方差

df[['投票人数','评分']].cov()

在这里插入图片描述

计数

统计表格长度

len(df)
38162

统计唯一值的个数

df['产地'].unique()
array(['美国', '意大利', '中国大陆', '日本', '法国', '英国', '韩国', '中国香港', '阿根廷', '德国',
       '印度', '其他', '加拿大', '波兰', '泰国', '澳大利亚', '西班牙', '俄罗斯', '中国台湾', '荷兰',
       '丹麦', '比利时', 'USA', '苏联', '巴西', '瑞典', '西德', '墨西哥'], dtype=object)
len(df['产地'].unique())
28

可以用数据替换的方式将重复数据进行合并,如美国和USA,德国和西德,俄罗斯和苏联

df['产地'].replace('USA','美国',inplace=True)
df['产地'].unique()
array(['美国', '意大利', '中国大陆', '日本', '法国', '英国', '韩国', '中国香港', '阿根廷', '德国',
       '印度', '其他', '加拿大', '波兰', '泰国', '澳大利亚', '西班牙', '俄罗斯', '中国台湾', '荷兰',
       '丹麦', '比利时', '苏联', '巴西', '瑞典', '西德', '墨西哥'], dtype=object)
df['产地'].replace(['西德','苏联'],['德国','俄罗斯'],inplace=True)
df['产地'].unique()
len(df['产地'].unique())
25

计算每一年的电影数量:

计算年代数量:

df['年代'].unique()
array([1994, 1957, 1997, 1993, 2012, 2013, 2003, 2016, 2009, 2008, 2001,
       1931, 1961, 2010, 2004, 1998, 1972, 1939, 2015, 1946, 2011, 1982,
       1960, 2006, 1988, 2002, 1995, 1996, 1984, 2014, 1953, 2007, 2000,
       1967, 1983, 1963, 1977, 1966, 1971, 1974, 1985, 1987, 1973, 1962,
       1969, 1989, 1979, 1981, 1936, 1954, 1992, 1970, 1991, 2005, 1920,
       1933, 1990, 1999, 1896, 1965, 1921, 1947, 1975, 1964, 1943, 1928,
       1986, 1895, 1949, 1932, 1905, 1940, 1908, 1900, 1978, 1951, 1958,
       1898, 1976, 1938, 1907, 1948, 1952, 1926, 1955, 1906, 1959, 1934,
       1944, 1888, 1909, 1925, 1956, 1923, 1945, 1913, 1903, 1904, 1980,
       1968, 1917, 1935, 1942, 1950, 1902, 1941, 1930, 1937, 1922, 1916,
       1929, 1927, 1919, 1914, 1912, 1924, 1918, 1899, 1901, 1915, 1892,
       1894, 1910, 1897, 1911, 1890, 2018])
len(df['年代'].unique())
127
df['年代'].value_counts()[:10]
2012    2018
2013    1977
2008    1926
2014    1867
2010    1863
2011    1845
2009    1837
2007    1685
2015    1569
2006    1488
Name: 年代, dtype: int64

电影产出前五的国家或地区:

df['产地'].value_counts()[:5]
美国      11712
日本       5007
中国大陆     3791
中国香港     2847
法国       2787
Name: 产地, dtype: int64

数据保存

df.to_excel('movie_data2.xlsx')

数据透视

pandas提供的pivot_table,可实现Excel的数据透视表功能

基础形式

pd.pivot_table(df,index='年代')

在这里插入图片描述

查看结果

pd.set_option('max_columns',100)#展示100列
pd.set_option('max_rows',500)#展示500行

使用多个索引

pd.pivot_table(df,index=['年代','产地'])

在这里插入图片描述

指定需要统计汇总的数据

pd.pivot_table(df,index=['年代','产地'],values=['评分'])

在这里插入图片描述

指定函数,来统计不同的统计值

pd.pivot_table(df,index=['年代','产地'],values=['投票人数'],aggfunc=np.sum)

在这里插入图片描述

通过将“投票人数”列和“评分”列进行对应分组,对“产地”实现数据聚合和总结

pd.pivot_table(df,index='产地',values=['投票人数','评分'],aggfunc=[np.sum,np.mean])

在这里插入图片描述

NaN难以处理,移除可使用fill_value将其设置成0

pd.pivot_table(df,index=['产地'],aggfunc=[np.sum,np.mean],fill_value=0)

在这里插入图片描述

加入margins=True,可在下方显示总和数据

pd.pivot_table(df,index=['产地'],aggfunc=[np.sum,np.mean],fill_value=0,margins=True)

在这里插入图片描述

在这里插入图片描述

对各个地区的投票人数求和,对评分求均值

对不同值执行不同的函数:可向aggfunc传递一个字典,但这样必须将标签做的简洁

pd.pivot_table(df,index='产地',values=['投票人数','评分'],aggfunc={'投票人数':np.sum,'评分':np.mean},fill_value=0)

在这里插入图片描述

对各个年份的投票人数求和,对评分求均值

pd.pivot_table(df,index='年代',values=['投票人数','评分'],aggfunc={'投票人数':np.sum,'评分':np.mean},fill_value=0)

在这里插入图片描述

透视表过滤

table=pd.pivot_table(df,index='年代',values=['投票人数','评分'],aggfunc={'投票人数':np.sum,'评分':np.mean},fill_value=0)
type(table)
pandas.core.frame.DataFrame
table[:5]

在这里插入图片描述

table[table.index==1994]

在这里插入图片描述

table.sort_values('评分',ascending=False)

在这里插入图片描述
同样可以按照多个索引进行汇总,形成层次化的表格结构

pd.pivot_table(df,index=['产地','年代'],values=['投票人数','评分'],aggfunc={'投票人数':np.sum,'评分':np.mean},fill_value=0)

在这里插入图片描述

第四次课作业

(1)读取上次作业保存的数据,酒店数据1.xlsx

df=pd.read_excel('酒店数据11.xlsx',index_col=0)
df

在这里插入图片描述

(2)查看“评分”的格式,并分别进行升序和降序排序

df['评分'].dtype
dtype('float64')
df.sort_values(by='评分')

在这里插入图片描述

df.sort_values('评分',ascending=False)

在这里插入图片描述

(3)对酒店按照价格进行排名,计算“油尖旺”地区的均价。

df.sort_values('价格')
df

在这里插入图片描述

df['价格'].mean()
681.6599496221662

(4)对酒店数据进行描述性统计,并求所有价格的均值方差,最大最小值,中值。

df.describe()

在这里插入图片描述

df['价格'].sum()
270619
df['价格'].var()
821348.2805383828
df['价格'].median()
418.0

(5)计算评分和价格之间的的相关系数,协方差

df[['评分','价格']].corr()

在这里插入图片描述

df[['评分','价格']].cov()

在这里插入图片描述

(6)按照评分降序排序,评分相同时按价格升序排序。

df.sort_values(['评分','价格'],ascending=[False,True])

在这里插入图片描述

(7)计算一下,评分小于3分的酒店数量和占比。

len(df[df['评分']<3])
12
len(df[df['评分']<3])/len(df)
0.030226700251889168

(8)计算一下,酒店评分大于等于4分的酒店的价格均值。

df[df['评分']>=4]['价格'].mean()
742.2205882352941

(9)计算出每个地区的酒店占总酒店数量的比例。

df['地区'].value_counts()/len(df)
油尖旺     0.465995
其他      0.141058
湾仔      0.103275
中西区     0.083123
九龙城     0.052897
东区      0.040302
离岛      0.027708
观塘      0.017632
荃湾      0.017632
葵青      0.012594
南区      0.012594
沙田      0.010076
元朗      0.005038
屯门      0.005038
罗湖区     0.002519
深水埗区    0.002519
Name: 地区, dtype: float64

(10)找出酒店评分人数排名前20的酒店,并计算他们的价格均值。

df.sort_values('评分人数',ascending=False)[:20]

在这里插入图片描述

df.sort_values('评分人数',ascending=False)[:20]['价格'].mean()
1110.55

(11)查看酒店分布的类型数量和地区数量,并统计各个类型和地区包含的酒店数量。

df['类型'].unique()
array(['休闲度假', '浪漫情侣', '商务出行', '海滨风光', '地铁周边', '交通方便', '亲子酒店', '其他', '民宿',
       '印象好', '酒店公寓', '青年旅舍', '客栈', '火车站周边', '老板热情', '环境不错', '干净卫生',
       '大学周边'], dtype=object)
len(df['类型'].unique())
18
df['地区'].unique()
array(['元朗', '东区', '油尖旺', '湾仔', '观塘', '中西区', '南区', '离岛', '九龙城', '荃湾',
       '屯门', '葵青', '其他', '沙田', '深水埗区', '罗湖区'], dtype=object)
len(df['地区'].unique())
16

(12)用数据透视表,计算每个类型的酒店的评分人数总数量。

pd.pivot_table(df,index='类型',values='评分人数')

在这里插入图片描述

(13)用数据透视表,计算每个类型的酒店价格的均值和标准差

pd.pivot_table(df,index='类型',values='价格',aggfunc=[np.var,np.std])

在这里插入图片描述

(14)用数据透视表,计算每个地区酒店价格和评分的最大值和最小值

pd.pivot_table(df,index='地区',values=['价格','评分'],aggfunc=[np.min,np.max])

在这里插入图片描述

(15)用数据透视表,计算每个地区和类型的酒店的评分的均值和标准差

pd.pivot_table(df,index=['地区','类型'],values=['评分'],aggfunc=[np.mean,np.std])

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值