iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 7
0
AI & Data

大數據的世代需學會的幾件事系列 第 7

Day7-輕鬆駕馭數據part5

在之前幾天,介紹缺失值的處理(Handling Missing Data)分層索引(Hierarchical Indexing),今天要來介紹資料組合(Combining Datasets)及分組與聚合(Aggregation and Grouping)

imprt numpy as np
import pandas as pd

Concat and Append

數據的蒐集來源來自不同地方,而有時候在做資料統計、資料分析時,就需要將資料就行連接、合併。而在pandas中提供concat函數來簡單連接資料。

  1. np.concatenate
  • 先建立一個矩陣,並將矩陣連結在一起。
x = [[1, 2],
     [3, 4]]
np.concatenate([x, x], axis=1)

out

  1. pd.concat
  • 先建立兩筆,並將資料連結在一起。
ser1 = pd.Series(['A', 'B', 'C'], index=[1, 2, 3])
ser2 = pd.Series(['D', 'E', 'F'], index=[4, 5, 6])
pd.concat([ser1, ser2])

out

  • 將多維的資料連接,並且指定連接方式為行的方式連接。
df3 = make_df('AB', [0, 1])
df4 = make_df('CD', [0, 1])
display('df3', 'df4', "pd.concat([df3, df4], axis='col')")

out

  • 利用join來指定連結條件
display('df5', 'df6',"pd.concat([df5, df6], join='inner')")

out

display('df5', 'df6', "pd.concat([df5, df6], join_axes=[df5.columns])")

out

2.append()
append方法不會修改原始對象,而是使用組合數據來創建新的對象。

display('df1', 'df2', 'df1.append(df2)')

out

Merge and Join

  • 創建兩筆資料
df1 = pd.DataFrame({'employee': ['Bob', 'Jake', 'Lisa', 'Sue'],
                    'group': ['Accounting', 'Engineering', 'Engineering', 'HR']})
df2 = pd.DataFrame({'employee': ['Lisa', 'Bob', 'Jake', 'Sue'],
                    'hire_date': [2004, 2008, 2012, 2014]})
display('df1', 'df2')

out

  • 一對一合併
df3 = pd.merge(df1, df2)
df3

out

  • 多對一合併
df4 = pd.DataFrame({'group': ['Accounting', 'Engineering', 'HR'],
                    'supervisor': ['Carly', 'Guido', 'Steve']})
display('df3', 'df4', 'pd.merge(df3, df4)')

out

  • 多對多合併
df5 = pd.DataFrame({'group': ['Accounting', 'Accounting',
                              'Engineering', 'Engineering', 'HR', 'HR'],
                    'skills': ['math', 'spreadsheets', 'coding', 'linux',
                               'spreadsheets', 'organization']})
display("pd.merge(df1, df5)")

out

  • 指定合併的資料行標籤名稱
display('df1', 'df2', "pd.merge(df1, df2, on='employee')")

out

  • 當兩個想要連接資料表的行標籤不同時,可以用left_on跟right_on,並且可以利用drop方法,將多餘的行標籤刪除。
df3 = pd.DataFrame({'name': ['Bob', 'Jake', 'Lisa', 'Sue'],
                    'salary': [70000, 80000, 120000, 90000]})
display('df1', 'df3', 'pd.merge(df1, df3, left_on="employee", right_on="name").drop('name', axis=1)')

out

  • 資料進行合併,可以利用how來指定連接條件,像是:inner、outter、left
df6 = pd.DataFrame({'name': ['Peter', 'Paul', 'Mary'],
                    'food': ['fish', 'beans', 'bread']},
                   columns=['name', 'food'])
df7 = pd.DataFrame({'name': ['Mary', 'Joseph'],
                    'drink': ['wine', 'beer']},
                   columns=['name', 'drink'])
display('df6', 'df7', 'pd.merge(df6, df7, how='inner)')

out


上一篇
Day6-輕鬆駕馭數據part4
下一篇
Day8-什麼是機器學習?
系列文
大數據的世代需學會的幾件事30

尚未有邦友留言

立即登入留言