Kevin's Data Analytics Blog

データサイエンティスト、AIエンジニアを目指す方に向けて情報発信していきます。

【初心者向け】Pandas入門 これだけは押さえておくべき基本操作|データ分析で必須

こんにちは、今回はPythonのライブラリの1つである、Pandasについて紹介したいと思います。
f:id:dskevin:20210523175543p:plain:h120

Pandasとは

データ分析用のライブラリで、表形式のデータを効率的に処理するための機能が多く提供されています。
実際のデータ分析作業のうち「データ前処理が8割を占める」とも言われるくらい、データ加工技術はデータ分析者にとって必須スキルであると言えます。また、Pythonでは機械学習用のライブラリもたくさん提供されているため、機械学習を適用する前のデータ加工も、PythonのライブラリであるPandasを使って行われることが多いです。

データソース

今回使用したデータは、以下のKaggleで公開されているポケモンの統計データを加工したものです。
Pokemon with stats | Kaggle

基本操作

Pandasライブラリのインポート

PythonでPandasを使うために、最初にライブラリをインポートします。

import pandas as pd

Pandasは慣習として、「pd」という短縮名でインポートします。

1. データファイルの読み込み(CSV/Excel/TSV)

CSVファイル

CSV形式のデータファイルを読み込む際には、pd.read_csvという関数を使用します。括弧の中には、対象のファイルのパスを記載します。

df = pd.read_csv('../data/Pokemon.csv')

上の例では、プログラムファイルが格納されているフォルダから1つ階層を上がって、「data」というフォルダ内にある「Pokemon.csv」を読み込んでいます。
もし、パスの記述方法についてあまり詳しくない場合は、プログラムファイルと同じフォルダ対象ファイルを置いて、ファイル名をシングルクォーテーション(’)で囲んで記述してもよいです。

df = pd.read_csv('Pokemon.csv')

また、pd.read_csvで読み込んだデータは、「=」の左側の変数に保存することができます。ここの変数名は自由に付けることが出来ます。こちらも慣習として、Pandasの表形式データを表す「データフレーム(DataFrame)」の略で「df」という変数名が使われることが多いです。

Excelファイル

Excel形式のデータを読み込む場合は、pd.read_excelという関数を使用します。使い方はpd.read_csvと同じです。

df = pd.read_excel('../data/Pokemon.xlsx')
TSVファイル

TSV形式のデータを読み込む場合も、CSV形式の場合と同じくpd.read_csv関数を使用します。ただし、オプションとして、「delimiter='\t'」を追加します。

df = pd.read_csv('../data/pokemon.txt', delimiter='\t')

TSV形式のデータは、データがタブで区切られているデータのことです。「delimiter」は区切り文字を意味し、「\t」タブ記号を意味します。
なお、pd.read_csvは、カンマやタブ以外で区切られたデータも読み込むことができ、例えば、「delimiter='XXX'」とすれば、XXXが区切り文字としてみなされます。

2. データの確認

データ全体

Jupyter notebookで、変数名だけ入力して実行すると、データフレームの中身を確認することが出来ます。

df

f:id:dskevin:20210523175816p:plain:h240
なお、末尾には、行数と列数も表示されています。このデータの場合、800行12列であることがわかります。

列名

「変数名.columns」で列名のリストを表示することが出来ます。

df.columns

f:id:dskevin:20210529181112p:plain

特定の列の値

「変数名[’列名’]」で特定の列の値を表示することが出来ます。

df['Name']

f:id:dskevin:20210529181156p:plain
また、複数の列名を指定する場合は、括弧を2重にして指定します。

df[['#','Name','Type 1']]

f:id:dskevin:20210529181207p:plain

特定の行の値

「変数名.loc[行インデックス]」で特定の列の値を表示することが出来ます。行インデックスはデフォルトで0から順に整数が割り当てられています。
f:id:dskevin:20210523204849p:plain:h320
赤で囲んでいる部分が行インデックスです。

インデックスは0始まりなので、2行目を抽出したい場合は1を指定します。

df.loc[1]

f:id:dskevin:20210529181218p:plain

また、複数の行を指定する場合は、複数列の指定と同様に括弧を2重にして指定します。

df.loc[[1,4,6]]

f:id:dskevin:20210529181340p:plain

3. 行のソート

「変数名.sort_values('列名')」で特定の列をキーとして、行を辞書順または数値順に並べ替えることができます。
例えば、Name列で並べ替えたい場合は、次の様に実行します。

df.sort_values('Name')

f:id:dskevin:20210529181357p:plain
降順に並べ替えたい場合は、「ascending=False」を付けます。

df.sort_values('Name', ascending=False)

f:id:dskevin:20210529181407p:plain
また、[]で囲むことで複数の列をキーとして指定することができます。

df.sort_values(['Type 1', 'HP'])

f:id:dskevin:20210529181420p:plain
デフォルトだと全て降順になりますが、昇順か降順かを別々に指定することもできます。例えば、Tpye 1を辞書の順に並べ変えて、HPを降順で大きい順に並べ替える場合のコードは以下のとおりです。

df.sort_values(['Type 1', 'HP']) , ascending=[True, False])

f:id:dskevin:20210529181432p:plain

4. 列の追加・削除

pandasで読み込んだデータの列を追加することができます。
「変数名['新しい列名'] = 値」とします。

df['Test'] = 1

f:id:dskevin:20210529181445p:plain
Testという列が追加されて、全ての値が1になっています。

新しい列の値として、それぞれの行で別々の値を設定することもできます。
例えば、各モンスターのHPからSpeedまでを全て足した値を、Totalという列名で追加する場合のコードは以下のとおりです。

df['Total'] = df['HP'] + df['Attack'] + df['Defense'] + df['Sp. Atk'] + df['Sp. Def'] + df['Speed']

f:id:dskevin:20210529181458p:plain
列を削除する場合は、「del 変数名['削除する列名']」とします。
先ほど追加したTestという列を削除します。

del df['Test']

5. 列の並べ替え

列の順番を並べ替えることもできます。
ここでは、一番に右側に追加したTotal列を、HP列の前に移動させたいと思います。コードの例は以下のとおりです。

# 現在の列名をリスト形式にして、変数colsに保存
cols = list(df.columns)
# 変数colsの中身を表示
print(cols)

f:id:dskevin:20210529181530p:plain

# 列名のリストをコピーし、表示したい順番に並べ替えて、別の変数cols_newに保存
cols_new = ['#', 'Name', 'Type 1', 'Type 2', 'Total', 'HP', 'Attack', 'Defense', 'Sp. Atk', 'Sp. Def', 'Speed', 'Generation', 'Legendary']
# 元の変数を上書き保存
df = df[cols_new]

f:id:dskevin:20210529181545p:plain

Total列の順番が変更されました。

6. ファイルに保存(CSV/Excel/TSV)

データフレームをファイルに保存することができます。読み込み時と同様に、3種類のファイル形式への出力方法を紹介します。

CSVファイル

データフレームをCSVファイルに保存する場合は、to_csvという関数を使用します。括弧の中には、出力ファイルのパスを記載します。

df.to_csv('../data/Pokemon_v2.csv')

実行すると、CSVファイルが生成されます。
f:id:dskevin:20210529181603p:plain

一番左のインデックス番号が不要な場合は、「index=False」を追加して実行します。

df.read_csv('../data/Pokemon_v2.csv', index=False)

f:id:dskevin:20210529181617p:plain

Excelファイル

データフレームをExcelファイルに保存する場合は、to_excelという関数を使用します。使い方はto_csvと同じです。

df.to_excel('../data/Pokemon_v2.xlsx', index=False)

f:id:dskevin:20210529181633p:plain

TSVファイル

データフレームをTSVファイルに保存する場合は、CSVの場合と同じでto_csv関数を使用します。ただし、オプションとして、「sep='\t'」を追加します。sepはseparatorの略です。

df.to_csv('../data/Pokemon_v2.txt', index=False, sep='\t')

f:id:dskevin:20210529181647p:plain

まとめ

Pandasの基本操作について紹介しました。今回紹介したとおり、Pandasでは多くの操作について、1行から数行の短いプログラムで書くことができます。そのため、プログラミング初心者でもすぐに使えるようになると思います。
また、今回も、記事の内容を実演した様子を動画にしてアップしています。わかりづらい点があれば、こちらもあわせてご確認ください。
youtu.be

最後まで読んでいただきありがとうございました。