データ クリーニングはデータ分析プロセスにおける重要なステップであり、欠損値、重複行、外れ値、および不正なデータ型の特定が含まれます。正確な分析とモデリングには、クリーンで信頼性の高いデータへのアクセスが重要です。
この記事では、よく使用される次の 6 つのデータ クリーニング操作を紹介します。
欠損値のチェック、重複行のチェック、外れ値の処理、すべての列のデータ型のチェック、不要な列の削除、データの不整合の処理
最初のステップとして、ライブラリとデータセットをインポートしましょう。
# Import libraries
import pandas as pd
# Read data from a CSV file
df = pd.read_csv('filename.csv')
欠損値をチェックする
isnull()
メソッドを使用すると、データ フレームまたは列の欠損値を確認できます。
# Check for missing values in the dataframe
df.isnull()
# Check the number of missing values in the dataframe
df.isnull().sum().sort_values(ascending=False)
# Check for missing values in the 'Customer Zipcode' column
df['Customer Zipcode'].isnull().sum()
# Check what percentage of the data frame these 3 missing values ••represent
print(f"3 missing values represents {(df['Customer Zipcode'].isnull().sum() / df.shape[0] * 100).round(4)}% of the rows in our DataFrame.")
郵便番号列に欠損値が 3 つあります
dropna()
少なくとも 1 つの欠損値を含む行または列は削除できます。
# Drop all the rows where at least one element is missing
df = df.dropna()
# or df.dropna(axis=0) **(axis=0 for rows and axis=1 for columns)
# Note: inplace=True modifies the DataFrame rather than creating a new one
df.dropna(inplace=True)
# Drop all the columns where at least one element is missing
df.dropna(axis=1, inplace=True)
# Drop rows with missing values in specific columns
df.dropna(subset = ['Additional Order items', 'Customer Zipcode'], inplace=True)
fillna()
欠損値を平均値、中央値、カスタム値などのより適切な値に置き換えることもできます。
# Fill missing values in the dataset with a specific value
df = df.fillna(0)
# Replace missing values in the dataset with median
df = df.fillna(df.median())
# Replace missing values in Order Quantity column with the mean of Order Quantities
df['Order Quantity'].fillna(df["Order Quantity"].mean, inplace=True)
重複行をチェックする
duplicate()
重複した行を表示するメソッド。
# Check duplicate rows
df.duplicated()
# Check the number of duplicate rows
df.duplicated().sum()
drop_duplates()
このメソッドを使用して、重複する行を削除できます。
# Drop duplicate rows (but only keep the first row)
df = df.drop_duplicates(keep='first') #keep='first' / keep='last' / keep=False
# Note: inplace=True modifies the DataFrame rather than creating a new one
df.drop_duplicates(keep='first', inplace=True)
外れ値への対処
外れ値は、分析に大きな影響を与える可能性のある極端な値です。これらは削除するか、より適切な値に変換することで対処できます。
describe()
の最大値や平均値などの情報は、外れ値を見つけるのに役立ちます。
# Get a statistics summary of the dataset
df["Product Price"].describe()
max" 値: 1999。他の値はいずれも 1999 に近くなく、平均は 146 であるため、1999 は対処する必要がある外れ値であると判断できます。
または、ヒストグラムを描画してデータの分布を確認することもできます。
plt.figure(figsize=(8, 6))
df["Product Price"].hist(bins=100)
ヒストグラムでは、ほとんどの価格データが 0 ~ 500 の範囲にあることがわかります。
箱ひげ図は外れ値の検出にも役立ちます。
plt.figure(figsize=(6, 4))
df.boxplot(column=['Product Price'])
価格列にいくつかの外れ値データ ポイントがあることがわかります。(400を超える値)
列のデータ型を確認してください
info()
データセット内の列のデータ型を表示できます。
# Provide a summary of dataset
df.info()
to_datetime()
メソッドは、列を日時データ型に変換します。
# Convert data type of Order Date column to date
df["Order Date"] = pd.to_datetime(df["Order Date"])
to_numeric()
列は数値データ型 (整数や浮動小数点など) に変換できます。
# Convert data type of Order Quantity column to numeric data type
df["Order Quantity"] = pd.to_numeric(df["Order Quantity"])
to_timedelta()
列を timedelta データ型に変換するメソッド。値が期間を表す場合は、この関数を使用できます。
# Convert data type of Duration column to timedelta type
df["Duration "] = pd.to_timedelta(df["Duration"])
不要な列を削除する
drop()
メソッドは、指定された行または列をデータ フレームから削除するために使用されます。
# Drop Order Region column
# (axis=0 for rows and axis=1 for columns)
df = df.drop('Order Region', axis=1)
# Drop Order Region column without having to reassign df (using inplace=True)
df.drop('Order Region', axis=1, inplace=True)
# Drop by column number instead of by column label
df = df.drop(df.columns[[0, 1, 3]], axis=1) # df.columns is zero-based
データの不整合の処理
データの不一致は、形式または単位の違いが原因である可能性があります。Pandas は、一貫性のないデータを処理するための文字列メソッドを提供します。
str.lower() & str.upper()
これら 2 つの関数は、文字列内のすべての文字を小文字または大文字に変換するために使用されます。これは、DataFrame 列内の文字列の大文字と小文字を正規化するのに役立ちます。
# Rename column names to lowercase
df.columns = df.columns.str.lower()
# Rename values in Customer Fname column to uppercase
df["Customer Fname"] = df["Customer Fname"].str.upper()
str.strip()
文字列値の先頭または末尾に表示される可能性のある余分なスペースを削除する関数。
# In Customer Segment column, convert names to lowercase and remove leading/trailing spaces
df['Customer Segment'] = df['Customer Segment'].str.lower().str.strip()
replace()
関数は、DataFrame 列の特定の値を新しい値に置き換えるのに使用されます。
# Replace values in dataset
df = df.replace({"CA": "California", "TX": "Texas"})
# Replace values in a spesific column
df["Customer Country"] = df["Customer Country"].replace({"United States": "USA", "Puerto Rico": "PR"})
mapping()
矛盾した値を正規化された値にマッピングする辞書を作成できます。次に、この辞書を replace() 関数で使用して置換を実行します。
# Replace specific values using mapping
mapping = {'CA': 'California', 'TX': 'Texas'}
df['Customer State'] = df['Customer State'].replace(mapping)
rename()
DataFrame の列名またはインデックス ラベルを変更する関数。
# Rename some columns
df.rename(columns={'Customer City': 'Customer_City', 'Customer Fname' : 'Customer_Fname'}, inplace=True)
# Rename some columns
new_names = {'Customer Fname':'Customer_Firstname', 'Customer Fname':'Customer_Fname'}
df.rename(columns=new_names, inplace=True)
df.head()
要約する
Python pandas には、欠落データの処理、重複データの削除、その他のデータ クリーニング操作を効率的に実行するための豊富な関数とメソッドのセットが含まれています。
pandas 関数を使用すると、データ サイエンティストとデータ アナリストはデータ クリーニング ワークフローを簡素化し、データセットの品質と整合性を確保できます。
https://avoid.overfit.cn/post/d594591441dd47b2b1a6264c1c71368a
著者: Python の基礎