Pandas筆記|【機器學習集訓營學員】(下)
寫在最前
Pandas是機器學習工作流程中,對數據進行預處理的重要工具。本筆記是同學在學習七月在線機器學習訓練營二期中的<pandas花式數據統計與分析技能>時的投稿筆記,分為上下兩篇。本筆記旨在記錄並整理寒老師講授的知識點,分享以供二期同學們交流及學習。
Pandas高級應用
Group
1)數據準備
#導入相關庫
import pandas as pd
import numpy as np
#建立實驗數據
salaries = pd.DataFrame({
name:[BOSS, Lilei, Lilei, Han, BOSS, BOSS, Han, BOSS],
Year:[2016,2016,2016,2016,2017,2017,2017,2017],
Salary:[999999,20000,25000,3000,9999999,999999,3500,999999],
Bonus:[100000,20000,20000,5000,200000,300000,3000,400000]
})
#簡單描述,看到索引,列,數據類型等DF結構,以及是否有空值等
http://salaries.info()
<class pandas.core.frame.DataFrame>
RangeIndex: 8 entries, 0 to 7
Data columns (total 4 columns):
Bonus 8 non-null int64
Salary 8 non-null int64
Year 8 non-null int64
name 8 non-null object
dtypes: int64(3), object(1)
memory usage: 336.0+ bytes
#主要對數據進行計數,看數據列的均值,離散程度,最大最小,以4分位數
salaries.describe()
salaries = salaries[[name,Year, Salary,Bonus]]#重排列
2)按照單列--名字列來做個分組
group_by_name = salaries.groupby(name)
type(group_by_name)
pandas.core.groupby.DataFrameGroupBy
3)分組後運算#如sum, size,mean,median等
group_by_name.sum()
group_by_name[[Salary,Bonus]].sum()
4)agg-並行執行多種運算
group_by_name[[Salary,Bonus]].agg([sum,mean,std,var])
5)Group對象的構成
group_by_name.groups
{BOSS: Int64Index([0, 4, 5, 7], dtype=int64),
Han: Int64Index([3, 6], dtype=int64),
Lilei: Int64Index([1, 2], dtype=int64)}
print(len(group_by_name.groups))
3
6)按多列進行分組
group_by_name_year = salaries.groupby([name,Year])
group_by_name_year.sum()
7)用迭代的方法查看分組詳情
for name, group in group_by_name:
print(name)
print(group)
BOSS
name Year Salary Bonus
0 BOSS 2016 999999 100000
4 BOSS 2017 9999999 200000
5 BOSS 2017 999999 300000
7 BOSS 2017 999999 400000
Han
name Year Salary Bonus
3 Han 2016 3000 5000
6 Han 2017 3500 3000
Lilei
name Year Salary Bonus
1 Lilei 2016 20000 20000
2 Lilei 2016 25000 20000
8)選擇不同的Group
group_by_name.get_group("Lilei")
group_by_name.get_group("BOSS")
9)同時在分組裡做幾個統agg計操作
group_by_name[[Bonus,Salary]].agg([sum,mean,std])
使用numpy下的運算函數
group_by_name[[Bonus,Salary]].agg([np.sum, np.mean, np.std]
Transform
1)數據準備
#使用Nvidia的股價數據
nvda = pd.read_csv(data/NVDA.csv, index_col=0, parse_dates=[Date])
http://nvda.info()
nvda.describe()
nvda.head()
2)根據已有列構造新列
nvda[year] = nvda.index.year
nvda.head()
3)刪除列
#注意inplace參數為True,代表的是原地刪除。
nvda.drop([year], axis=1, inplace=True)
4)索引列進行處理後排序
nvda.index.year#返回日期型索引的年
nvda.index.month#返回日期型索引的月
nvda.index.day#返回日期型索引的日
#如果我們想按年來先進行group,再進行統計,可以這樣來進行
key = lambda x : x.year
nvda.groupby(key).agg([mean,std]).head()
5)Transform變換
變換函數transform針對的是列:
transform=nvda.groupby(key).transform(lambda x : (x-x.mean())/x.std()).head()
transform
6)#按月取得當月內價格波動範圍
price_range = lambda x : x.max()-x.min()
nvda.groupby(lambda x:x.month).transform(price_range).head()
7)盡量把pandas的運算變成列與列之間的運算
#使用shift函數對列數據進行上下平移後產生新的列,再與原列進行運算。
salaries[Salary_shift] = salaries[Salary].shift(1)
salaries[diff] = salaries[Salary] - salaries[Salary_shift]
salaries
8)簡單繪畫
%matplotlib inline
my_compare = pd.DataFrame({Origin Adj Close:nvda[Adj Close],
Transformed Adj Close:transform["Adj Close"]})
my_compare.head()
my_compare.plot()
transform["Adj Close"].plot(grid=True)
Transform和apply
apply
對每列指定操作
nvda.groupby(key).apply(lambda x : x).head()
拼接concat
1)數據準備
df1 = pd.DataFrame({apts:[55000, 60000, 80000],
cars:[200000, 300000, 400000]})
df2 = pd.DataFrame({apts:[35000, 30000, 50000],
cars:[210000,310000,410000]})
df3 = pd.DataFrame({apts:[34000, 32000, 70000],
cars:[240000,350000,440000]})
2)縱向拼接
pd.concat([df1, df2, df3])
append一樣可以完成
df1.append(df2)
df1.append([df1,df2])
3)橫向拼接
pd.concat([df1, df2, df3],axis=1)
Merge(join)表關聯
1)數據準備
df4 = pd.DataFrame({apts:[55000, 60000, 80000],
cars:[200000, 300000, 400000]},
index = [Beijing,Shanghai,Nanjing])
df5 = pd.DataFrame({apts:[55000, 70000, 80000],
cars:[100000, 330000, 260000]},
index = [Beijing,Shanghai,Nanjing])
2)左連
pd.merge(df4, df5, on=[apts], how=left)
3)右連
pd.merge(df4, df5, on=[apts], how=right)
4)內連
pd.merge(df4, df5, on=[apts], how=inner)
5)外連
pd.merge(df4, df5, on=[apts], how=outer)
寫在最後
本篇筆記介紹pandas dataframe對象的高級應用,課後寒老師也留關於bike的一個工程。Pandas操作靈活,功能強大,對於有SQL基礎的同學來講有福氣,但對於初次接觸的同學的確需要一定的時間才能熟悉。Pandas在機器學習訓練營二期中是第三周的課程的主題,是下一步進行機器學習的數據的前站。需要反覆練習,認真做習題,來掌握Pandas這個』內存表格處理』庫。
推薦閱讀: