2017-10-07

Pandas データの前処理で使えるチートシート

Pandasでデータのクリーニングをするためのチートシートを作ってみた


PandasJupiter 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のTweepyを利用して、Twitter APIを利用している。 その中で、ハマったポイントをメモしておく。 まず、Searchに関して。 Twitter検索は、クライアントアプリ側では、全期間の検索が可能になっている。 一方で、APIを利用する際は、過去1週間しか...