Pandas数据分析练⼿题(⼗题)----------------------------------------------------------------------------------------------------------------------
1 - 开始了解你的数据
探索Chipotle快餐数据
-- 将数据集存⼊⼀个名为chipo的数据框内
-- 查看前10⾏内容
-- 数据集中有多少个列(columns)?
-- 打印出全部的列名称
-
- 数据集的索引是怎样的?
-- 被下单数最多商品(item)是什么?
-- 在item_name这⼀列中,⼀共有多少种商品被下单?
-- 在choice_description中,下单次数最多的商品是什么?
-- ⼀共有多少商品被下单?
-- 将item_price转换为浮点数
-- 在该数据集对应的时期内,收⼊(revenue)是多少?
-- 在该数据集对应的时期内,⼀共有多少订单?
-- 每⼀单(order)对应的平均总价是多少?
import pandas as pd
#将数据集存⼊⼀个名为chipo的数据框内
chipo = pd.read_csv('chipotle.tsv',sep='\t')
#查看前10⾏内容
chipo.head(10)
#数据集中有多少个列(columns)?
chipo.shape[1]
#打印出全部的列名称
#数据集的索引是怎样的?
chipo.index
#被下单数最多商品(item)是什么?
chipo[['item_name','quantity']].groupby(by=['item_name']).sum().sort_values(by=['quantity'],ascending=False)
#在item_name这⼀列中,⼀共有多少种商品被下单?
chipo.item_name.nunique()
#在choice_description中,下单次数最多的商品是什么?
#chipo[['choice_description','quantity']].groupby(by=['choice_description']).sum().sort_values(by=['quantity'],ascending=False) chipo['choice_description'].value_counts().head()
#⼀共有多少商品被下单?
chipo['quantity'].sum()
#将item_price转换为浮点数
#货币符号后取起
chipo['item_price'] = chipo['item_price'].apply(lambda x: float(x[1:]))
#在该数据集对应的时期内,收⼊(revenue)是多少?
(chipo['quantity'] * chipo['item_price']).sum()
#在该数据集对应的时期内,⼀共有多少订单?
chipo['order_id'].nunique()
#每⼀单(order)对应的平均总价是多少?
chipo['item_price_sum'] = chipo['quantity'] * chipo['item_price']
(chipo[['order_id','item_price_sum']].groupby(by=['order_id']).sum()).mean()
2 - 数据过滤与排序
探索2012欧洲杯数据
-- 将数据集命名为euro12
-
- 只选取 Goals 这⼀列
-- 有多少球队参与了2012欧洲杯?
-- 该数据集中⼀共有多少列(columns)?
-- 将数据集中的列Team, Yellow Cards和Red Cards单独存为⼀个名叫discipline的数据框-- 对数据框discipline按照先Red Cards再Yellow Cards进⾏排序
-- 计算每个球队拿到的黄牌数的平均值
-- 到进球数Goals超过6的球队数据
-- 选取以字母G开头的球队数据
-- 选取前7列
-- 选取除了最后3列之外的全部列
-- 到英格兰(England)、意⼤利(Italy)和俄罗斯(Russia)的射正率(Shooting Accuracy)
import pandas as pd
#将数据集命名为euro12
euro12 = pd.read_csv('C:\\Users\\Administrator\\Desktop\\Euro2012.csv')
#只选取 Goals 这⼀列
euro12.Goals
#有多少球队参与了2012欧洲杯?
euro12.Team.nunique()
#该数据集中⼀共有多少列(columns)?
euro12.shape[1]
#将数据集中的列Team, Yellow Cards和Red Cards单独存为⼀个名叫discipline的数据框
discipline = euro12[['Team','Yellow Cards','Red Cards']]
groupby是什么函数
#对数据框discipline按照先Red Cards再Yellow Cards进⾏排序
discipline.sort_values(by=['Red Cards','Yellow Cards'],ascending = False)
#计算拿到的黄牌数的平均值
euro12['Yellow Cards'].mean()
#到进球数Goals超过6的球队数据
euro12[euro12.Goals>6]
#选取以字母G开头的球队数据
euro12[euro12.Team.str.startswith('G')]
#选取前7列
euro12.iloc[:,0:7]
#选取除了最后3列之外的全部列
euro12.iloc[:,0:-3]
#到英格兰(England)、意⼤利(Italy)和俄罗斯(Russia)的射正率(Shooting Accuracy)
euro12.loc[euro12['Team'].isin(['England','Italy','Russia']),['Team','Shooting Accuracy']]
#loc:通过⾏标签索引数据
#iloc:通过⾏号索引⾏数据
#ix:通过⾏标签或⾏号索引数据(基于loc和iloc的混合)
练习3-数据分组
探索酒类消费数据
-- 将数据框命名为drinks
-- 哪个⼤陆(continent)平均消耗的啤酒(beer)更多?
-
- 打印出每个⼤陆(continent)的红酒消耗(wine_servings)的描述性统计值
-- 打印出每个⼤陆每种酒类别的消耗平均值
-- 打印出每个⼤陆每种酒类别的消耗中位数
-- 打印出每个⼤陆对spirit饮品消耗的平均值,最⼤值和最⼩值
import pandas as pd
#将数据框命名为drinks
drinks = pd.read_csv('C:\\Users\\Administrator\\Desktop\\drinks.csv')
#哪个⼤陆(continent)平均消耗的啤酒(beer)更多?
(drinks[['continent','beer_servings']].groupby(by=['continent']).mean().sort_values(by=['beer_servings'],ascending =False)).head(1)
#打印出每个⼤陆(continent)的红酒消耗(wine_servings)的描述性统计值
#打印出每个⼤陆每种酒类别的消耗平均值
#打印出每个⼤陆每种酒类别的消耗中位数
#打印出每个⼤陆对spirit饮品消耗的平均值,最⼤值和最⼩值
练习4-Apply函数
探索1960 - 2014 美国犯罪数据
-- 将数据框命名为crime
-
- 每⼀列(column)的数据类型是什么样的?
-- 将Year的数据类型转换为 datetime64
-- 将列Year设置为数据框的索引
-- 删除名为Total的列
-- 按照Year(每⼗年)对数据框进⾏分组并求和
-- 何时是美国历史上⽣存最危险的年代?
import pandas as pd
#将数据框命名为drinks
crime = pd.read_csv('C:\\Users\\Administrator\\Desktop\\US_Crime_Rates_1960_2014.csv',index_col=0)
#每⼀列(column)的数据类型是什么样的?
crime.info()
#将Year的数据类型转换为 datetime64
crime.Year = pd.to_datetime(crime.Year,format='%Y')
#将列Year设置为数据框的索引
crime = crime.set_index('Year',drop=True)
#删除名为Total的列
del crime['Total']
crime.head()
#按照Year(每⼗年)对数据框进⾏分组并求和
crimes = sample('10AS').sum()
population = sample('10AS').max() #⼈⼝是累计数,不能直接求和
crimes['Population'] = population
#何时是美国历史上⽣存最危险的年代?
crime.idxmax(0)#最⼤值的索引值
练习5-合并
探索虚拟姓名数据
-- 创建DataFrame
-- 将上述的DataFrame分别命名为data1, data2, data3
-- 将data1和data2两个数据框按照⾏的维度进⾏合并,命名为all_data
-- 将data1和data2两个数据框按照列的维度进⾏合并,命名为all_data_col
-- 打印data3
-
- 按照subject_id的值对all_data和data3作合并
-- 对data1和data2按照subject_id作连接
-- 到 data1 和 data2 合并之后的所有匹配结果