データフレームの概要理解する “df_overview” スクリプトを紹介します。

🧩 データを俯瞰する作業は分析の最初の重要なステップ

データ分析を始めたばかりのとき、最もつまずきやすいのが 「データの全体像がつかめない」 という問題です。 列が多かったり、欠損があったり、文字列と数値が混ざっていたりすると、どこから手をつければよいのか迷ってしまいます。

そこで役立つのが、このページで紹介する df_overview スクリプトです。 列名・データ型・ユニーク数・欠損数などを一覧で確認できるため、データセットの特徴を短時間で把握し、次に行うべき前処理や分析の方向性を決める助けになります。

初心者にとって、こうした 「データを俯瞰する作業」は、分析の最初の重要なステップです。

🧩 スクリプトの内容

1
2
3
4
5
6
7
8
9
10
# 必要なモジュールをインポート
import numpy as np
import pandas as pd

# DataFrame 要約 列番号、列名、ユニーク変数数、データタイプ、NaN の個数
pd.options.display.max_rows = 220
## Check for unique values of categorical variables
df_overview = pd.DataFrame([[i, len(df[i].unique()), df[i].dtypes, df[i].isnull().sum()] for i in df.columns], 
                          columns=['Feature', 'Unique Values', 'dtypes', 'NaN'])
df_overview

🧩 結果

image

🧩「ユニーク数を見ると何がわかるのか」

ユニーク数(その列に含まれる異なる値の数)を見ることで、列の性質がつかめます。 例えば、ユニーク数が少なければカテゴリ変数の可能性が高く、逆に非常に多ければIDのような識別子かもしれません。
この情報は、どの列を分析に使えるか、どの列を前処理すべきかを判断する助けになります。

🧩「欠損値が多い列はどう扱うのか」

欠損値(NaN)が多い列は、分析の精度に影響するため注意が必要です。 欠損が多い列は、

(1) 削除する
(2) 平均値・中央値・最頻値で補完する
(3) モデルを使って補完する
(4) そもそも使わない列として除外する

などの判断が必要になります。まずは 「どの列にどれくらい欠損があるのか」 を把握することが、前処理の第一歩です。

🧩「データ型を確認する理由」

データ型(int, float, object など)を確認することで、その列がどのように扱われるべきかがわかります。 例えば、数字に見えるのに object 型になっている場合、文字列として扱われてしまい、計算や集計が正しくできません。 データ型の確認は、後の分析でエラーを防ぐための重要なチェックポイントです。

🧩「このスクリプトを使うと、どんな分析準備が楽になるのか」

df_overview を使うと、列名・ユニーク数・データ型・欠損数を一覧で確認できるため、次のような作業がスムーズになります。

(1) どの列を前処理すべきか判断しやすくなる
(2) カテゴリ変数・数値変数の分類がすぐにできる
(3) 欠損値の扱い方針を立てやすくなる
(4) 不要な列(ID列など)を早い段階で除外できる

つまり、データセットの全体像を短時間でつかみ、分析の準備を効率化できるのが最大のメリットです。

🧩 pandasの表示行数を変更する

データフレームを表示したときに、途中が … で省略されずに指定した行数まで表示できるようにします。

1
2
3
4
5
6
7
8
# 必要なモジュールをインポート
import numpy as np

# 表示行数を600行に設定
pd.set_option('display.max_rows', 600)

# (参考) 列数も同様に変更したい場合
pd.set_option('display.max_columns', 100)

データフレームの行数を超えて設定する必要があります。 データフレームのサイズが、(520, 80) では、すべて表示されます。しかし、(610, 101) だと、依然として途中が … で省略されしまいます。

元の設定値に戻したい場合は、以下のコードで戻ります。

1
2
3
4
5
6
# 必要なモジュールをインポート
import pandas as pd

# 元の設定(デフォルト)にリセット
pd.reset_option('display.max_rows')
pd.reset_option('display.max_columns')

🧩 特定の列に欠損値(NaN)が含まれる行を削除(除外)

データフレームの理解を進めて、データをクレンジングする最初のステップとして pandasのデータフレームから「特定の列に欠損値(NaN)が含まれる行」を削除(除外)する処理を行うには以下のコードになります。

1
2
3
4
5
6
7
8
9
10
11
12
col_name = 'target_col_name'

df = df[df[col_name].isnull() == False]

# 「isnull(欠損値である)」の「~(逆=欠損値ではない)」行を抽出
df = df[~df[col_name].isnull()]

# 欠損値ではない(値がある)行を抽出
df = df[df[col_name].notnull()]

# subsetで指定した列に NaN がある行を削除する
df = df.dropna(subset=[col_name])

実務では、3つ目の dropna(subset=[...]) を使うケースが一番多いので、ぜひこちらも合わせて覚えてみてください!

⚠️ ビッグデータを CSV から読み込む: pandasで直接書く方法

最近のpandasなら、ビッグデータを CSV から読み込む際は、まず⽂字コードエラーの扱いを慎重に選ぶ必要があります。 特に errors="ignore" を使うと、不正な⽂字が「消えてしまう」ため、元データのどこに問題があったのか後から確認できなくなります。
以下がお勧めのコードです。

1
2
3
4
5
6
7
8
filename = "big_data.csv"

df = pd.read_csv(
    filename,
    encoding="cp932",
    encoding_errors="replace",
    low_memory=False
)

replace を使えば、不正⽂字は「�」として残るため、後述の「置換された行を探す」で問題⾏を抽出できます。 このステップを挟むことで、df_overview の結果がより信頼できるものになり、後続の前処理や分析を安全に進められます。

⚠️ encoding_errors=“ignore” vs encoding_errors=“replace”

« 例 »
元データ(不正な文字を含む):
東京都□港区

encoding_errors=“ignore” encoding_errors=“replace”
東京都港区 東京都�港区
不正文字が消える 不正文字があった場所が分かる

⚠️ 置換された行を探す

1
2
3
4
5
mask = df.astype(str).apply(
    lambda col: col.str.contains("", na=False)
).any(axis=1)

df_error = df[mask]

で置換文字を含む行だけ抽出できます。

件数だけなら

1
2
3
df.astype(str).apply(
    lambda col: col.str.count("")
).sum().sum()

で置換文字の総数を確認します。0件なら安心して処理を続け、1件以上なら元CSVのどこに不正文字があるか調査します。
ignoreはエラー箇所が分からなくなるため、データ品質チェックの観点ではreplaceの方がおすすめです。

データフレームのインデックス番号、インデックス名を指定してその行を削除する

おまけとして、インデックス名を指定してその行を削除するとてもよく使うコマンドを併記します。

1
2
3
4
5
# データフレームの2行目にもタイトルの残骸があり、その行は無効なの
# 行を指定して削除する
# index[0] はデータフレームとしては最初の行だが、無効なため削除する

df = df.drop(df.index[[0]])