PythonでPandasを使用して文字列や数値をNaNに変換する方法

この記事では、PythonにてPandasを用いて特定の値をNaN(Not a Number)に置き換えるデータクレンジング手法とその重要性について掘り下げます。

背景と基本概念

NaNは欠損値や無効なデータを表すために使用されます。データセット内で不適切な値(例えば、年齢が0、または負の数値)を見つけた場合、それらをNaNに置き換えることで、データの整合性を保ち分析の正確性を向上させることができます。例えば統計的分析ではNaNは計算から除外されるため、実際のデータの特性をより正確に反映させることができます。

ケーススタディ

ここでは、PythonにてPandasを用いて仮想の自動車データセットを作成し、文字列や数値をNaNに変換する過程を示します。

サンプルデータセットの作成

まず、Pandasを使用して仮想の自動車データセットを作成します。このデータセットには、ブランド名、価格、走行距離、製造年が含まれます。ここではブランド名に不適切な文字列が含まれているケースや、価格や製造年が0として記録されているケースを想定します。

import pandas as pd
import numpy as np

# 仮想のデータフレームを作成
data = {
    'Brand': ['Toyota', 'Honda', 'Ford', 'Audi', '???'],
    'Price': [20000, 0, 22000, 35000, 32000],
    'Mileage': [15000, 20000, 30000, 5000, 8000],
    'Year': [2015, 2013, 0, 2018, 2017]
}

df = pd.DataFrame(data)

# データセットの最初の5行を表示
print("Original DataFrame:")
print(df)
Original DataFrame:
    Brand  Price  Mileage  Year
0  Toyota  20000    15000  2015
1   Honda      0    20000  2013
2    Ford  22000    30000     0
3    Audi  35000     5000  2018
4     ???  32000     8000  2017

データのクレンジング

次に、データクレンジングのプロセスを実行します。不適切な文字列を含む Brand 列のデータをNaNに置き換え、PriceYear 列で0の値をNaNに置き換えます。

replaceは以下のような指定で複数カラム一括で変換が可能なので覚えておくと便利かと思います。

# Brand列で不適切な文字列をNaNに置き換える
df['Brand'] = df['Brand'].replace('???', np.nan)

# PriceとYear列で0の値をNaNに置き換える
df.replace({'Price': 0, 'Year': 0}, np.nan, inplace=True)

# 置き換え後のデータを確認
print("\nDataFrame after replacements:")
print(df)
DataFrame after replacements:
    Brand    Price  Mileage    Year
0  Toyota  20000.0    15000  2015.0
1   Honda      NaN    20000  2013.0
2    Ford  22000.0    30000     NaN
3    Audi  35000.0     5000  2018.0
4     NaN  32000.0     8000  2017.0

Brand、Price、Year列の指定した値がNaNに置き換わっていることが確認できました。


以上、特定の値をあえてNaNに変換する事例の紹介でした。データとして意味のない値を欠損値として処理するプロセスは、全体的な統計量を実態と離れた形で歪めないためにも重要になることがありますので、ぜひご参考にしてください。

最新情報をチェックしよう!