Pandasでデータのクリーニングをするためのチートシートを作ってみた
PandasとJupiter Notebookを使ってデータ分析をする機会が増えてきましたが、その際やっているデータの前処理がだいたい一緒だと気づきました。そこで、データのクリーニングでよく使うメソッドを、一覧形式でまとめておきたいと思います。なお、グーグル検索で英語で検索されることも多いため、英語でも記述します。
前提
- COBOL.csvが存在
- 列には、以下の値が入っている
- workers:従業員数:ex 13名
- age:従業員平均年齢:ex 31歳
- income:年収: ex 400万 ~ 600万円
- establishment:創立年度:ex 1998年03月32日
- requirement:必要要件
- title:求人のタイトル名
pandasのインポート(import pandas)
- データを扱えるようにするライブラリPandasを入れるimport pandas as pd
pandas:CSVデータの読み込み(read csv):read_csv
- csvをデータフレーム(df)型に読み込み- 期待値:df型にCSVデータが挿入されている
df = pd.read_csv("COBOL.csv")
pandas:データの閲覧(see nth data)
- headメソッドを使う
- 引数には、取得した行数を選択。10行分ほしかったらhead(10)
- 期待値:10行分の行が出力されている
df.head(10)
pandas:指定した行の一部の文字を変換(convert string into "") :str.replace()
- 従業員規模を数量データとして扱いたいため、[名]という値を削除したい
- str.replace()を利用
- replace("値","変更後の値")
- 期待値:メソッド実施後、値が変更されている
df["workers"] = df["workers"].str.replace("名","") #名を削除する
pandas:指定した文字の後をすべて削除する(remove all string after string):
- 年収データの、[万]以降を取り除きたい
- split("指定する値").str[0]を利用する
- 期待値:万以降の値が取り除かれている
df["income"] = df["income"].str.split("万").str[0] #万以降を削除する
pandas:指定した列の削除(drop certain rows):df.drop
- dropメソッドを利用
- 引数には、[行数],axis=1を指定
- axis = 1は、列を指定、axis = 0は行を指定
- 期待値:["Unnamed: 0"]列が削除されている
df = df.drop(["Unnamed: 0"],axis=1) #列Unnamed: 0を削除する
pandas:重複行の存在を確認(check if duplicated rows exist):duplicated().any()
- 企業名の重複があるかどうか確認。
- duplicated().any()メソッドの利用
- 期待値:重複があればTrue、なければFalseがかえってくる
df["company"].duplicated().any() #企業名の重複チェック、存在すればTrue
pandas:重複行の削除(remove duplicated rows):drop_duplicates
- drop_duplicateメソッドを利用
- 期待値:重複行が削除されている。確認方法はlenメソッドでデータの個数が減っていればOK
df = df.drop_duplicates(["company"]) #列companyの重複を削除する
pandas:特定の文字列の値を含んでいる行を検索する(get rows which contains certain string)
- 2017年度に創立された企業を探したい
- 期待値:"2017/"という文字列を[establishment]列に含んだ行のみを取り出す
df = df[df["establishment"].str.contains("2017/", na=False)]
pandas:列の含む数字が大きい順番に並べる(sort)
- 創立年度が古い順から並び替えたい
- ascending = Falseは昇順
- ascending = Trueは降順
- 期待値:もっとも古い値が[establishment]に存在する行順に並び替える
df.sort_values(by=["establishment"], ascending=False)
pandas:列の並び替え(replace columns):
- 各列の値を並び替えたい
- 期待値:title, requirement, workers, age, income, establishmentの順番に並び替えられている
data = data[["title", "requirement", "workers", "age", "income","establishment"]]
#title, requirement, workers, age, income, establishmentの順番に並び替えられます
pandas:文字列オブジェクトからnumericalに変換(convert string into numerical)
data["workers"] = pd.to_numeric(data["workers"])#workers列の値をnumericalに変換
pandas:行の数を数えたい(count number of rows)
- データフレームに存在する行の数を取得したい- 期待値:データフレームの行数が出力されている
len(df)
pandas:整形済みデータを新たなCSVに保存する(save csv)
- 前処理を行ったデータフレームを、CSVに保存したい
- to_csvメソッドを利用
- to_csvの引数には、ファイル名を入力
df.to_csv("newcsv.csv")
最後に
実際のJupiter notebook貼り付けておきましたので、ご参照あれ!
また、これらのデータを利用して分析してみたい場合は、この記事も見てみてください。
【Python初心者向け】データの取得・操作・結合・グラフ化をStep by Stepでやってみる - pandas, matplotlib -
今回は データの取得、整理、グラフ化までをすべてPythonを使ってやってみたいと思います。利用するのは Pandas で、これさえあればデータの取得、整理、グラフ化までを全部行ってくれます。
■入門マニュアル
〇 Python データ分析入門マニュアル - 実例を使ってWebスクレイピングからデータビジュアライゼーションまでやってみよう
〇 Pythonの環境構築でもう悩まない!初心者でも絶対にできるクラウドを使った環境構築方法!
■スクレイピング
〇 Python初心者が3カ月でWebスクレイピングができるようになるために必要な知識
〇 【Python】スクレイピング→データ収集→整形→分析までの流れを初心者向けにまとめておく ~Pythonに関するはてな記事を10年分スクレイピングし、Pythonトレンド分析を実際にやってみた~
■データビジュアライゼーション
〇 【Python初心者向け】データの取得・操作・結合・グラフ化をStep by Stepでやってみる - pandas, matplotlib -
■定期処理