pandas でデータを変換する

Python で学ぶ ETL と ELT

Jake Roach

Data Engineer

パイプラインでデータを変換する

データは適切に変換することで、下流のユーザーに価値を提供できます

データ変換のワークフロー。

pandas には、表形式データを変換する強力なツールがあります

  • .loc[]
  • .to_datetime()
Python で学ぶ ETL と ELT

.loc[] でレコードをフィルタリングする

.loc[] を使うと、DataFrame の両方の次元を変換できます

# Keep only non-zero entries
cleaned = raw_stock_data.loc[raw_stock_data["open"] > 0, :]
# Remove excess columns
cleaned = raw_stock_data.loc[:, ["timestamps", "open", "close"]]
# Combine into one step
cleaned = raw_stock_data.loc[raw_stock_data["open"] > 0, ["timestamps", "open", "close"]]

.iloc[] は整数インデックスを使って DataFrame をフィルタリングします

cleaned = raw_stock_data.iloc[[0:50], [0, 1, 2]]
Python で学ぶ ETL と ELT

データ型を変更する

下流の利用ケースに合わせて、データ型の変換が必要になることがよくあります

  • .to_datetime()
# "timestamps" column currectly looks like: "20230101085731"
# Convert "timestamps" column to type datetime
cleaned["timestamps"] = pd.to_datetime(cleaned["timestamps"], format="%Y%m%d%H%M%S")
Timestamp('2023-01-01 08:57:31')
# "timestamps" column currently looks like: 1681596000011
# Convert "timestamps" column to type datatime
cleaned["timestamps"] = pd.to_datetime(cleaned["timestamps"], unit="ms")
Timestamp('2023-04-15 22:00:00.011000')
Python で学ぶ ETL と ELT

変換を検証する

データの変換にはリスクが伴います

  • 情報の損失
  • 不正なデータの発生
# Several ways to investigate a DataFrame
cleaned = raw_stock_data.loc[raw_stock_data["open"] > 0, ["timestamps", "open", "close"]]
print(cleaned.head())
# Return smallest and largest records
print(cleaned.nsmallest(10, ["timestamps"]))
print(cleaned.nlargest(10, ["timestamps"]))
Python で学ぶ ETL と ELT

練習しましょう!

Python で学ぶ ETL と ELT

Preparing Video For Download...