0Pricing
Python Academy · レッスン

マージ、結合、データクリーニング

DataFrame を結合し、欠損値を適切に処理します。

「マージ、結合、データクリーニング」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

pd.merge

pd.merge(left, right, on="key") は共通の列を使って 2 つの DataFrame を結合します。SQL の JOIN に似ています。

import pandas as pd

users = pd.DataFrame({"id":[1,2,3],"name":["A","B","C"]})
orders = pd.DataFrame({"user_id":[1,1,2],"amount":[100,50,200]})
result = pd.merge(users, orders, left_on="id", right_on="user_id")
print(result)

結合の種類

how="inner"(デフォルト)、"left"、"right"、"outer" を指定して、どの行を残すかを制御します。

import pandas as pd

A = pd.DataFrame({"key":["a","b","c"],"val":[1,2,3]})
B = pd.DataFrame({"key":["b","c","d"],"x":[10,20,30]})

print(pd.merge(A, B, on="key", how="left"))   # all of A
print(pd.merge(A, B, on="key", how="outer"))  # all rows

df.join

df.join(other) はインデックスで結合します。列ではなくインデックスで結合する場合に、より高速で簡単です。

import pandas as pd

df1 = pd.DataFrame({"a":[1,2]}, index=["x","y"])
df2 = pd.DataFrame({"b":[3,4]}, index=["x","y"])
print(df1.join(df2))
# x: a=1 b=3
# y: a=2 b=4

concat

pd.concat([df1, df2]) は DataFrame を縦方向(axis=0)または横方向(axis=1)に連結します。

import pandas as pd

df1 = pd.DataFrame({"a":[1,2]})
df2 = pd.DataFrame({"a":[3,4]})
print(pd.concat([df1,df2], ignore_index=True))
# a: 1 2 3 4

# Horizontal:
df3 = pd.DataFrame({"b":[5,6]})
print(pd.concat([df1,df3], axis=1))

欠損値の処理

isna()/notna() で NaN を検出します。fillna() で値を埋め、dropna() で削除します。

import pandas as pd, numpy as np

df = pd.DataFrame({"a":[1,np.nan,3],"b":[np.nan,2,3]})
print(df.isna().sum())      # count nulls per column
df["a"] = df["a"].fillna(0)
df = df.dropna()            # drop rows with any null

fillna の方法

欠損値は、定数、前方埋め(ffill)、後方埋め(bfill)、または列の平均値で埋めることができます。

import pandas as pd, numpy as np

df = pd.DataFrame({"val":[1, np.nan, np.nan, 4]})
print(df["val"].ffill())   # forward fill: 1 1 1 4
print(df["val"].bfill())   # back fill:    1 4 4 4
print(df["val"].fillna(df["val"].mean()))   # fill with mean

データ型の変更

astype() を使用して列の型を変換します。日付の解析には pd.to_datetime() を使用し、安全に数値へ変換するには errors="coerce" を指定した pd.to_numeric を使用します。

import pandas as pd

df = pd.DataFrame({"age":["25","30","35"],"date":["2024-01-01","2024-06-15","2024-12-31"]})
df["age"] = df["age"].astype(int)
df["date"] = pd.to_datetime(df["date"])
print(df.dtypes)

文字列のクリーニング

Pandas の .str アクセサーは、ベクトル化された文字列操作を提供します。strip()、lower()、replace()、extract() などを使用できます。

import pandas as pd

df = pd.DataFrame({"name":["  Alice  "," bob","CAROL"]})
df["clean"] = df["name"].str.strip().str.title()
print(df["clean"])   # Alice / Bob / Carol

列の名前変更と並べ替え

df.rename(columns={"old":"new"}) で名前を変更します。リストを使ってインデックス参照すると、列の順序を変更できます。

import pandas as pd

df = pd.DataFrame({"a":[1],"b":[2],"c":[3]})
df = df.rename(columns={"a":"alpha","b":"beta"})
df = df[["c","beta","alpha"]]   # reorder
print(df.columns.tolist())      # ['c', 'beta', 'alpha']

重複の検出

duplicated() で重複を見つけ、drop_duplicates() で削除します。

import pandas as pd

df = pd.DataFrame({"id":[1,2,1,3],"val":["a","b","a","c"]})
print(df.duplicated())           # [F F T F]
print(df[df.duplicated()])       # show duplicates
clean = df.drop_duplicates(subset=["id"])

行・列の変換における apply

df.apply(func, axis=1) は各行に関数を適用します。axis=0 を指定すると各列に適用します。

import pandas as pd

df = pd.DataFrame({"a":[1,2,3],"b":[4,5,6]})
# New column = row sum:
df["total"] = df.apply(lambda row: row["a"] + row["b"], axis=1)
print(df)

確認問題

df.fillna(method="ffill") は何をしますか。

復習

SQL 形式の結合には pd.merge、積み重ねには pd.concat を使用します。NaN は isna()、fillna()、dropna() で処理します。.str アクセサーで文字列をクリーニングします。astype() と pd.to_datetime() で型を変換します。

よくある質問

「マージ、結合、データクリーニング」レッスンは無料ですか?

はい。「マージ、結合、データクリーニング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「マージ、結合、データクリーニング」で何を学びますか?

DataFrame を結合し、欠損値を適切に処理します。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「マージ、結合、データクリーニング」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Series と DataFrame の基礎
  2. インデックス指定、フィルタリング、ブールマスク
  3. GroupBy、集約、ピボットテーブル
  4. マージ、結合、データクリーニング
← Python Academyに戻る