データエンジニアが遭遇する可能性のある最も一般的なデータの問題とその対処法についての備忘録です。
サンプルデータフレームの生成
pandasを用いてサンプルのデータフレームを作成します。
import pandas as pd
# 架空のデータフレームの作成
sales = pd.DataFrame({
'SalesOrderID': [101, 102, 103],
'Quantity': [10, 15, 12],
# ↓汚いデータの例
'Revenue': ["1500円", "2300円", "1800円"]
})
# データフレームの表示
print(sales)
下記が作成したデータフレームになります。
SalesOrderID Quantity Revenue
0 101 10 1500円
1 102 15 2300円
2 103 12 1800円
dtypes関数を使いデータ型を確認します。
sales.dtypes
↓出力結果
SalesOrderID int64
Quantity int64
Revenue object
dtype: object
dtypes属性を使用してカラムのデータ型を詳しく調べると、Revenue列ではobjectが返されます。objectは、pandasが文字列を格納するために使用するものです。
この状態でRevenue列にsum関数を適用すると、
sales['Revenue'].sum()
下記のような出力結果になります。
"1500円2300円1800円"
ご覧の通り、各行の文字列を合わせた連結文字列が出力されます。これは期待するものではありません。
前処理を行う
# Revenue列の全行から'円'を削除
sales['Revenue'] = sales['Revenue'].str.strip('円')
# Revenue列の全データをstringからintに変更
sales['Revenue'] = sales['Revenue'].astype('int')
再度、各カラムの型を確認します。
sales.dtypes
↓出力結果
SalesOrderID int64
Quantity int64
Revenue int64
dtype: object
Revenue列がint型に変更されたことを確認できました。
確認
再度、Revenue列の合計を計算してみます。
sales['Revenue'].sum()
↓出力結果
5600
期待通りRevenue列の合計額を取得できました!