Coursera – Introduction to Data Science in Python #14 (3週目その1)

Coursera『Introduction to Data Science in Python – by University of Michigan』の学習メモ

Merging Dataframes

第3週目もpandasのDataFrameについて掘り下げる。ここらへんは前回の自己学習(復習)でも触れたものも多い。

使うデータは以下の通り。


import pandas as pd

df = pd.DataFrame([{'Name': 'Chris', 'Item Purchased': 'Sponge', 'Cost': 22.50},
                   {'Name': 'Kevyn', 'Item Purchased': 'Kitty Litter', 'Cost': 2.50},
                   {'Name': 'Filip', 'Item Purchased': 'Spoon', 'Cost': 5.00}],
                  index=['Store 1', 'Store 1', 'Store 2'])
df

データフレームへのカラムの追加

データフレームに値を入れる場合、行数とデータ数を一致させなくはならない。つまり、一部の行にデータが入っていない場合は、Noneを明示する必要がある。


df['Date'] = ['December 1', 'January 1', 'mid-May', ]
df['Delivered'] = True
df['Feedback'] = ['Positive', None, 'Negative']

シリーズをデータフレームに入れる

シリーズを使えば、指定した行だけに値を入れることができる。


adf = df.reset_index()
adf['Date'] = pd.Series({0: 'December 1', 2: 'mid-May'})

データベース用語の整理

Outer Join (Union)

Inner Join (Intersection)


staff_df = pd.DataFrame([{'Name': 'Kelly', 'Role': 'Director of HR'},
                         {'Name': 'Sally', 'Role': 'Course liasion'},
                         {'Name': 'James', 'Role': 'Grader'}])
staff_df = staff_df.set_index('Name')
student_df = pd.DataFrame([{'Name': 'James', 'School': 'Business'},
                           {'Name': 'Mike', 'School': 'Law'},
                           {'Name': 'Sally', 'School': 'Engineering'}])
student_df = student_df.set_index('Name')
print(staff_df.head())
print()
print(student_df.head())
#                  Role
# Name                 
# Kelly  Director of HR
# Sally  Course liasion
# James          Grader
# 
#             School
# Name              
# James     Business
# Mike           Law
# Sally  Engineering

Outer Join

mergerの引数を how=’outer’ とする。


pd.merge(staff_df, student_df, how='outer', left_index=True, right_index=True)

Inner Join

mergerの引数を how=’inner’ とする。


pd.merge(staff_df, student_df, how='inner', left_index=True, right_index=True)

Set addition

merge(staff_df, student_df) として引数を how=’left’ とすれば左のテーブルを基準に、how=’right’ とすれば右のテーブルを基準にマージすることができる。


pd.merge(staff_df, student_df, how='left', left_index=True, right_index=True)
#   Role    School
# Name      
# Kelly Director of HR  NaN
# Sally Course liasion  Engineering
# James Grader  Business

pd.merge(staff_df, student_df, how='right', left_index=True, right_index=True)
#   Role    School
# Name      
# James Grader  Business
# Mike  NaN Law
# Sally Course liasion  Engineering

Index以外でのmerge


staff_df = staff_df.reset_index()
student_df = student_df.reset_index()
pd.merge(staff_df, student_df, how='left', left_on='Name', right_on='Name')

複数のカラムをキーにしたmerge


staff_df = pd.DataFrame([{'First Name': 'Kelly', 'Last Name': 'Desjardins', 'Role': 'Director of HR'},
                         {'First Name': 'Sally', 'Last Name': 'Brooks', 'Role': 'Course liasion'},
                         {'First Name': 'James', 'Last Name': 'Wilde', 'Role': 'Grader'}])
student_df = pd.DataFrame([{'First Name': 'James', 'Last Name': 'Hammond', 'School': 'Business'},
                           {'First Name': 'Mike', 'Last Name': 'Smith', 'School': 'Law'},
                           {'First Name': 'Sally', 'Last Name': 'Brooks', 'School': 'Engineering'}])
staff_df
student_df
pd.merge(staff_df, student_df, how='inner', left_on=['First Name','Last Name'], right_on=['First Name','Last Name'])

Source

兵庫県西宮市生まれのフリーランスRailsエンジニア。海外を拠点にデジタルノマド生活中。/ 前職・資格:公認会計士 / プログラミング言語:Ruby, JavaScript, HTML, CSS / 日本語・英語
コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です