數據集下載地址:https://github.com/Rango-2017/Pandas_exercisesgit
----------------------------------------------------------------------------------------------------------------------github
1 - 開始瞭解你的數據api
-- 將數據集存入一個名爲chipo的數據框內
-- 查看前10行內容
-- 數據集中有多少個列(columns)?
-- 打印出所有的列名稱
-- 數據集的索引是怎樣的?
-- 被下單數最多商品(item)是什麼?
-- 在item_name這一列中,一共有多少種商品被下單?
-- 在choice_description中,下單次數最多的商品是什麼?
-- 一共有多少商品被下單?
-- 將item_price轉換爲浮點數
-- 在該數據集對應的時期內,收入(revenue)是多少?
-- 在該數據集對應的時期內,一共有多少訂單?
-- 每一單(order)對應的平均總價是多少?app
import pandas as pd #將數據集存入一個名爲chipo的數據框內 chipo = pd.read_csv('chipotle.tsv',sep='\t') #查看前10行內容 chipo.head(10) #數據集中有多少個列(columns)? chipo.shape[1] #打印出所有的列名稱 chipo.columns #數據集的索引是怎樣的? 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()
-- 將數據集命名爲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']] #對數據框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的混合)
-- 將數據框命名爲drinks
-- 哪一個大陸(continent)平均消耗的啤酒(beer)更多?
-- 打印出每一個大陸(continent)的紅酒消耗(wine_servings)的描述性統計值
-- 打印出每一個大陸每種酒類別的消耗平均值
-- 打印出每一個大陸每種酒類別的消耗中位數
-- 打印出每一個大陸對spirit飲品消耗的平均值,最大值和最小值ui
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)的描述性統計值 drinks.groupby('continent').wine_servings.describe() #打印出每一個大陸每種酒類別的消耗平均值 drinks.groupby('continent').mean() #打印出每一個大陸每種酒類別的消耗中位數 drinks.groupby('continent').median() #打印出每一個大陸對spirit飲品消耗的平均值,最大值和最小值 drinks.groupby('continent').spirit_servings.describe()
-- 將數據框命名爲crime
-- 每一列(column)的數據類型是什麼樣的?
-- 將Year的數據類型轉換爲 datetime64
-- 將列Year設置爲數據框的索引
-- 刪除名爲Total的列
-- 按照Year(每十年)對數據框進行分組並求和
-- 什麼時候是美國曆史上生存最危險的年代?spa
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 = crime.resample('10AS').sum() population = crime.resample('10AS').max() #人口是累計數,不能直接求和 crimes['Population'] = population #什麼時候是美國曆史上生存最危險的年代? crime.idxmax(0)#最大值的索引值
-- 建立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 合併以後的全部匹配結果rest
import pandas as pd import numpy as np raw_data_1 = { 'subject_id': ['1', '2', '3', '4', '5'], 'first_name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'last_name': ['Anderson', 'Ackerman', 'Ali', 'Aoni', 'Atiches']} raw_data_2 = { 'subject_id': ['4', '5', '6', '7', '8'], 'first_name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'last_name': ['Bonder', 'Black', 'Balwner', 'Brice', 'Btisan']} raw_data_3 = { 'subject_id': ['1', '2', '3', '4', '5', '7', '8', '9', '10', '11'], 'test_id': [51, 15, 15, 61, 16, 14, 15, 1, 61, 16]} #建立DataFrame #將上述的DataFrame分別命名爲data1, data2, data3 data1 = pd.DataFrame(raw_data_1) data2 = pd.DataFrame(raw_data_2) data3 = pd.DataFrame(raw_data_3) #將data1和data2兩個數據框按照行的維度進行合併,命名爲all_data all_data = pd.concat([data1,data2],axis=0) #將data1和data2兩個數據框按照列的維度進行合併,命名爲all_data_col all_data_col = pd.concat([data1,data2],axis=1) #打印data3 data3 #按照subject_id的值對all_data和data3做合併 pd.merge(all_data,data3,on='subject_id') #對data1和data2按照subject_id做內鏈接 pd.merge(data1,data2,on='subject_id',how='inner') #找到 data1 和 data2 合併以後的全部匹配結果 pd.merge(data1,data2,on='subject_id',how='outer')
-- 將數據做存儲而且設置前三列爲合適的索引
-- 2061年?咱們真的有這一年的數據?建立一個函數並用它去修復這個bug
-- 將日期設爲索引,注意數據類型,應該是datetime64[ns]
-- 對應每個location,一共有多少數據值缺失
-- 對應每個location,一共有多少完整的數據值
-- 對於全體數據,計算風速的平均值
-- 建立一個名爲loc_stats的數據框去計算並存儲每一個location的風速最小值,最大值,平均值和標準差
-- 建立一個名爲day_stats的數據框去計算並存儲全部location的風速最小值,最大值,平均值和標準差
-- 對於每個location,計算一月份的平均風速
-- 對於數據記錄按照年爲頻率取樣
-- 對於數據記錄按照月爲頻率取樣code
import pandas as pd import datetime #將數據做存儲而且設置前三列爲合適的索引 df = pd.read_csv('C:\\Users\\Administrator\\Desktop\\wind.data',sep='\s+',parse_dates=[[0,1,2]]) #2061年?咱們真的有這一年的數據?建立一個函數並用它去修復這個bug def fix_century(x): year = x.year - 100 if x.year>1999 else x.year return datetime.date(year,x.month,x.day) df['Yr_Mo_Dy'] = df['Yr_Mo_Dy'].apply(fix_century) #將日期設爲索引,注意數據類型,應該是datetime64[ns] df['Yr_Mo_Dy'] = pd.to_datetime(df['Yr_Mo_Dy']) df = df.set_index('Yr_Mo_Dy') #對應每個location,一共有多少數據值缺失 df.isnull().sum() #對應每個location,一共有多少完整的數據值 df.shape[1] - df.isnull().sum() #對於全體數據,計算風速的平均值 df.mean().mean() #建立一個名爲loc_stats的數據框去計算並存儲每一個location的風速最小值,最大值,平均值和標準差 loc_stats = pd.DataFrame() loc_stats['min'] = df.min() loc_stats['max'] = df.max() loc_stats['mean'] = df.mean() loc_stats['std'] = df.std() #建立一個名爲day_stats的數據框去計算並存儲全部天的風速最小值,最大值,平均值和標準差 day_stats = pd.DataFrame() day_stats['min'] = df.min(axis=1) day_stats['max'] = df.max(axis=1) day_stats['mean'] = df.mean(axis=1) day_stats['std'] = df.std(axis=1) #對於每個location,計算一月份的平均風速 df['date'] = df.index df['year'] = df['date'].apply(lambda df: df.year) df['month'] = df['date'].apply(lambda df: df.month) df['day'] = df['date'].apply(lambda df: df.day) january_winds = df.query('month ==1') #query等同於df[df.month==1] january_winds.loc[:,'RPT':'MAL'].mean() #對於數據記錄按照年爲頻率取樣 df.query('month ==1 and day == 1') #對於數據記錄按照月爲頻率取樣 df.query('day == 1')
-- 將數據框命名爲titanic
-- 將PassengerId設置爲索引
-- 繪製一個展現男女乘客比例的扇形圖
-- 繪製一個展現船票Fare, 與乘客年齡和性別的散點圖
-- 有多少人生還?
-- 繪製一個展現船票價格的直方圖orm
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import numpy as np #將數據框命名爲titanic titanic = pd.read_csv('C:\\Users\\Administrator\\Desktop\\train.csv') #將PassengerId設置爲索引 titanic = titanic.set_index('PassengerId') #繪製一個展現男女乘客比例的扇形圖 Male = (titanic.Sex == 'male').sum() Female = (titanic.Sex == 'female').sum() proportions = [Male,Female] plt.pie(proportions, labels=['Male','Female'],shadow=True, autopct='%1.1f%%',startangle=90,explode=(0.15,0)) plt.axis('equal') plt.title('Sex Proportion') plt.tight_layout() plt.show() #繪製一個展現船票Fare, 與乘客年齡和性別的散點圖 lm = sns.lmplot(x='Age',y='Fare', data=titanic,hue='Sex',fit_reg=False) lm.set(title='Fare x Age') #設置座標軸取值範圍 axes = lm.axes axes[0,0].set_ylim(-5,) axes[0,0].set_xlim(-5,85) #有多少人生還? titanic.Survived.sum() #繪製一個展現船票價格的直方圖 df = titanic.Fare.sort_values(ascending = False) plt.hist(df,bins = (np.arange(0,600,10))) plt.xlabel('Fare') plt.ylabel('Frequency') plt.title('Fare Payed Histrogram') plt.show()
-- 建立一個數據字典
-- 將數據字典存爲一個名叫pokemon的數據框中
-- 數據框的列排序是字母順序,請從新修改成name, type, hp, evolution, pokedex這個順序
-- 添加一個列place['park','street','lake','forest']
-- 查看每一個列的數據類型
import pandas as pd #建立一個數據字典 raw_data = {"name": ['Bulbasaur', 'Charmander','Squirtle','Caterpie'], "evolution": ['Ivysaur','Charmeleon','Wartortle','Metapod'], "type": ['grass', 'fire', 'water', 'bug'], "hp": [45, 39, 44, 45], "pokedex": ['yes', 'no','yes','no'] } #將數據字典存爲一個名叫pokemon的數據框中 pokemon = pd.DataFrame(raw_data) #數據框的列排序是字母順序,請從新修改成name, type, hp, evolution, pokedex這個順序 pokemon = pokemon[['name', 'type', 'hp', 'evolution', 'pokedex']] #添加一個列place['park','street','lake','forest'] pokemon['place'] = ['park','street','lake','forest'] #看每一個列的數據類型 pokemon.dtypes
-- 讀取數據並存爲一個名叫apple的數據框
-- 查看每一列的數據類型
-- 將Date這個列轉換爲datetime類型
-- 將Date設置爲索引
-- 有重複的日期嗎?
-- 將index設置爲升序
-- 找到每月的最後一個交易日(business day)
-- 數據集中最先的日期和最晚的日期相差多少天?
-- 在數據中一共有多少個月?
-- 按照時間順序可視化Adj Close值
import pandas as pd #讀取數據並存爲一個名叫apple的數據框 apple = pd.read_csv('C:\\Users\\Administrator\\Desktop\\appl_1980_2014.csv') #查看每一列的數據類型 apple.dtypes #將Date這個列轉換爲datetime類型 apple.Date = pd.to_datetime(apple.Date) #將Date設置爲索引 apple = apple.set_index('Date') #有重複的日期嗎? apple.index.is_unique #將index設置爲升序 apple = apple.sort_index(ascending = True) #找到每月的最後一個交易日(business day) apple_month = apple.resample('BM').mean() apple_month.head() #數據集中最先的日期和最晚的日期相差多少天? (apple.index.max() - apple.index.min()).days #在數據中一共有多少個月? len(apple_month) #按照時間順序可視化Adj Close值 apple['Adj Close'].plot(title = 'Apple Stock').get_figure().set_size_inches(9,5)
-- 將數據集存成變量iris
-- 建立數據框的列名稱['sepal_length','sepal_width', 'petal_length', 'petal_width', 'class']
-- 數據框中有缺失值嗎?
-- 將列petal_length的第10到19行設置爲缺失值
-- 將petal_lengt缺失值所有替換爲1.0
-- 刪除列class
-- 將數據框前三行設置爲缺失值
-- 刪除有缺失值的行
-- 從新設置索引
import pandas as pd import numpy as np #讀取數據並存爲一個名叫apple的數據框 iris = pd.read_csv('C:\\Users\\Administrator\\Desktop\\iris.data') #建立數據框的列名稱['sepal_length','sepal_width', 'petal_length', 'petal_width', 'class'] iris.columns = ['sepal_length','sepal_width', 'petal_length', 'petal_width', 'class'] #數據框中有缺失值嗎? iris.isnull().sum() #將列petal_length的第10到19行設置爲缺失值 iris['petal_length'].loc[10:19]=np.nan #將petal_lengt缺失值所有替換爲1.0 iris.petal_length.fillna(1 , inplace=True) #刪除列class del iris['class'] #將數據框前三行設置爲缺失值 iris.loc[0:2,:]=np.nan #刪除有缺失值的行 iris = iris.dropna(how='any') #從新設置索引 iris = iris.reset_index(drop = True)#加上drop參數,原有索引就不會成爲新的列
參考至科賽網
https://www.kesci.com/home/project/59e77a636d213335f38daec2