1. 程式人生 > >利用python進行資料分析之——資料規整化1(ETL)

利用python進行資料分析之——資料規整化1(ETL)

待我學有所成,結髮與蕊可好。@夏瑾墨 by Jooey

合併資料集

  1. 資料庫風格的DataFrame合併
  2. 索引上的合併
  3. 軸向連線

1.資料庫風格的DataFrame合併

import pandas as pd
from pandas import Series,DataFrame
#一對多
df1=DataFrame({'key':['b','b','a','c','a','a','b'],'data1':range(7)})
df2=DataFrame({'key':['a','b','d'],'data2':range(3)})
pd.merge(df1,df2) #merge預設inner連線,結果中的鍵是交集。
pd.merge(df1,df2,on='key')

這裡寫圖片描述

df3=DataFrame({'lkey':['b','b','a','c','a','a','b'],'data1':range(7)})
df4=DataFrame({'rkey':['a','b','d'],'data2':range(3)})
pd.merge(df3,df4,left_on='lkey',right_on='rkey')

pd.merge(df1,df2,how='outer')

這裡寫圖片描述

#多對多連線產生的是行的笛卡爾積。
df1=DataFrame({'key':['b','b','a','c'
,'a','b'],'data1':range(6)}) df2=DataFrame({'key':['a','b','a','b','d'],'data2':range(5)}) pd.merge(df1,df2,how='left') pd.merge(df1,df2,how='inner')

這裡寫圖片描述

 #根據多個鍵進行合併
left=DataFrame({
'key1':['foo','foo','bar'],
'key2':['one','two','one'],
'lval':[1,2,3]
})
right=DataFrame({
'key1':['foo','foo','bar'
,'bar'], 'key2':['one','one','one','two'], 'rval':[4,5,6,7] }) pd.merge(left,right,on=['key1','key2'],how='outer')#outer外連線求取的是鍵的並集。組合了左連線和右連線的效果。

這裡寫圖片描述

 #重複列名的處理
pd.merge(left,right,on='key1')
pd.merge(left,right,on='key1',suffixes=('_left','_right'))

這裡寫圖片描述
pandas.merge 可根據一個或者多個鍵將不同的DataFrame的行連線起來,實現的效果同資料庫SQL語句的連線操作。
pandas.concat 沿一條軸將多個物件編接在一起。
suffixes用於指定附加到左右兩個DataFrame物件重疊列名的上的字串。

2.索引上的合併

left1=DataFrame({'key':['a','b','a','a','b','c'],'value':range(6)})
right1=DataFrame({'group_val':[3.5,7]},index=['a','b'])
pd.merge(left1,right1,left_on='key',right_index=True)
pd.merge(left1,right1,left_on='key',right_index=True,how='outer')

這裡寫圖片描述

#層次化索引
lefth=DataFrame({
'key1':['Ohio','Ohio','Ohio','Nevada','Nevada'],
'key2':[2000,2001,2002,2001,2002],
'data':np.arange(5)
})
righth=DataFrame(
np.arange(12).reshape((6,2)),
index=[['Nevada','Nevada','Ohio','Ohio','Ohio','Ohio'],
[2001,2000,2000,2000,2001,2002]],
columns=['event1','event2']
)
pd.merge(lefth,righth,left_on=['key1','key2'],right_index=True)
pd.merge(lefth,righth,left_on=['key1','key2'],right_index=True,how='outer')

這裡寫圖片描述

#同時使用合併雙方的索引
left2=DataFrame([[1,2],[3,4],[5,6]],index=['a','c','e'],columns=['Ohio','Nevada'])
right2=DataFrame([[7,8],[9,10],[11,12],[13,14]],index=['b','c','d','e'],columns=['Missouri','Alabama'])
pd.merge(left2,right2,how='outer',left_index=True,right_index=True)
#join例項方法
left2.join(right2,how='outer')
left1.join(right1,on='key')

向Join傳入一組DataFrame
another=DataFrame([[7,8],[9,10],[11,12],[16,17]],
index=['a','c','e','f'],columns=['New York','Oregon'])
left2.join([right2,another])
left2.join([right2,another],how='outer')

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

待我學有所成,結髮與蕊可好。@夏瑾墨 by Jooey