🐍
(学習ログ)Python014:pandasによるデータの読み込みと前処理
1. はじめに
この記事の目的
この記事では、pandasを使った基本的なデータの読み込みと前処理の方法を学びます。
この記事の概要
- CSVファイルとExcelファイルの読み込み
- 日付データの変換と月次データの抽出
- 文字列データの正規化(大文字変換・スペース削除)
- データの並び替えとユニーク値の確認
2. サンプルコード
コード全文
import pandas as pd
# CSVファイルから売上データを読み込む
sample_uriage_data = pd.read_csv("002_サンプル/sample_uriage_data.csv")
# Excelファイルから顧客台帳を読み込む
sample_customer_ledger = pd.read_excel("002_サンプル/sample_customer_ledger.xlsx")
# purchase_date列を日付型に変換
sample_uriage_data["purchase_date"] = pd.to_datetime(sample_uriage_data["purchase_date"])
# 日付から年月(YYYYMM形式)を抽出して新しい列を作成
sample_uriage_data["purchase_month"] = sample_uriage_data["purchase_date"].dt.strftime("%Y%m")
# 商品名を全て大文字に変換
sample_uriage_data["item_name"] = sample_uriage_data["item_name"].str.upper()
# 商品名から全角スペースを削除
sample_uriage_data["item_name"] = sample_uriage_data["item_name"].str.replace(" ", "")
# 商品名から半角スペースを削除
sample_uriage_data["item_name"] = sample_uriage_data["item_name"].str.replace(" ","")
# 商品名で昇順にソート
sample_uriage_data.sort_values(by=["item_name"], ascending=True)
# ユニークな商品名の一覧を表示
print(pd.unique(sample_uriage_data["item_name"]))
# ユニークな商品名の件数を表示
print(len(pd.unique(sample_uriage_data["item_name"])))
コード解説
データの読み込み部分
sample_uriage_data = pd.read_csv("002_サンプル/sample_uriage_data.csv")
sample_customer_ledger = pd.read_excel("002_サンプル/sample_customer_ledger.xlsx")
-
pd.read_csv()でCSVファイルを、pd.read_excel()でExcelファイルをDataFrame形式で読み込みます - ファイルパスは相対パスで指定しています
日付データの処理
sample_uriage_data["purchase_date"] = pd.to_datetime(sample_uriage_data["purchase_date"])
sample_uriage_data["purchase_month"] = sample_uriage_data["purchase_date"].dt.strftime("%Y%m")
-
pd.to_datetime()で文字列を日付型に変換します -
.dt.strftime("%Y%m")で「2024年1月」を「202401」のような年月形式に変換し、月次集計に利用できるようにします
文字列の正規化
sample_uriage_data["item_name"] = sample_uriage_data["item_name"].str.upper()
sample_uriage_data["item_name"] = sample_uriage_data["item_name"].str.replace(" ", "")
sample_uriage_data["item_name"] = sample_uriage_data["item_name"].str.replace(" ","")
-
.str.upper()で商品名を全て大文字に統一します(「Coffee」と「COFFEE」を同じものとして扱うため) -
.str.replace()で全角・半角スペースを削除します(表記揺れを防ぐため)
並び替えとユニーク値の確認
sample_uriage_data.sort_values(by=["item_name"], ascending=True)
print(pd.unique(sample_uriage_data["item_name"]))
print(len(pd.unique(sample_uriage_data["item_name"])))
-
sort_values()で商品名をアルファベット順に並び替えます -
pd.unique()でユニークな商品名の一覧を取得します -
len()でユニークな商品名が何種類あるかをカウントします
実行結果例
# ユニークな商品名の一覧
['COFFEE' 'GREENTEAPOWDER' 'LATTE' 'MILKTEA' 'ORANGEJUICE']
# ユニークな商品名の件数
5
この結果から、売上データには5種類の商品が含まれていることが分かります。スペースが削除され、全て大文字に統一されているため、「Coffee」「COFFEE」「coffee 」のような表記揺れがあっても、全て「COFFEE」として認識されています。
3. エラーと確認のポイント
代表的なエラー文
ファイルが見つからない場合
FileNotFoundError: [Errno 2] No such file or directory: '002_サンプル/sample_uriage_data.csv'
- 原因: ファイルパスが間違っているか、ファイルが存在しません
- 対処法: カレントディレクトリを確認し、正しいパスを指定してください
日付変換でエラーが出る場合
ParserError: Unknown string format
- 原因: 日付列に変換できない値(空白や文字列)が含まれています
-
対処法:
pd.to_datetime()にerrors='coerce'オプションを追加して、変換できない値をNaTにします
列名が存在しない場合
KeyError: 'purchase_date'
- 原因: 指定した列名がDataFrameに存在しません
-
対処法:
df.columnsで列名を確認してください
よく使う確認メソッドと出力例
データの形状を確認
print(sample_uriage_data.shape)
# (100, 5) # 100行5列のデータ
列名を確認
print(sample_uriage_data.columns)
# Index(['purchase_date', 'customer_id', 'item_name', 'quantity', 'price'], dtype='object')
最初の数行を表示
print(sample_uriage_data.head(3))
# purchase_date customer_id item_name quantity price
# 0 2024-01-15 C1 COFFEE 2 500
# 1 2024-01-16 C2 LATTE 1 600
# 2 2024-01-17 C3 ORANGEJUICE 3 400
データ型を確認
print(sample_uriage_data.dtypes)
# purchase_date datetime64[ns]
# customer_id object
# item_name object
# quantity int64
# price int64
# dtype: object
欠損値の確認
print(sample_uriage_data.isnull().sum())
# purchase_date 0
# customer_id 0
# item_name 2
# quantity 0
# price 0
# dtype: int64
4. まとめ
本記事で理解できるようになったこと:
-
複数形式のファイル読み込み:
read_csv()とread_excel()を使い分けて、異なるファイル形式のデータを読み込める -
日付データの加工:
pd.to_datetime()とdt.strftime()を組み合わせて、日付から年月情報を抽出し、月次集計の準備ができる - 文字列の正規化手法: 大文字変換とスペース削除により、表記揺れを防ぎ、データの一貫性を保つことができる
Discussion