Pandasの基本的な使い方まとめ

Pandasの基本的な使い方まとめ
えびかずき
えびかずき

こんにちは、えびかずきです。

今回は、Pandasの基本的な使い方について説明します。

こんな人におすすめ:
・Pythonでデータ処理を始めたのでPandasについて学びたい
・使い方をど忘れしたので確認したい

https://pandas.pydata.org/

最近Pandasを使う機会がかなり多くなってきたので、自分のための備忘録としても、使い方を簡単にまとめておこうと思います。

開発環境

  • Python 3.7.3
  • Pandas 1.2.4
  • NumPy 1.20.2
  • scikit-learn 0.24.2(データの加工で使用)
  • IDE: jupyter Notebook

Pandasはpipで以下のようにしてインストールできます。

$ pip install pandas

Pandasの基本的な使い方

ここでは、Pandasの基本的な使い方について実装例を見ながら説明していきます。

なお、それぞれのPythonコードは、前提として以下のライブラリがインポートされているものとします。

今回は、Pandasに加えてサブでNumPyも使います。

# Pandasのインポート
import pandas as pd
import numpy as np

Series(1次元データ)の操作

Pandasでは1次元のデータをpandas.Seriesクラスで扱います。

Seriesの作成

Seriesクラスは以下のように引数としてリストなどのイテラブルな配列を与えて作成します。

NumPyの配列を与えてもOKです。

# Seriesの作成

sample_list = [1,2,3,4,5]
# sample_list = np.array([1,2,3,4,5])
series = pd.Series(sample_list)

# jupyter Notebookで表示
series
Seriesの作成のアウトプット

DataFrame(2次元データ)の操作

Pandasでは2次元のデータをpandas.DataFrameクラスで扱います。

DataFrameの作成

# 2次元データの作成(DataFrame)
df = pd.DataFrame([['伊藤', 168, 64], ['山田', 161, 58], ['鈴木', 171, 62]],
                  columns=['Name', 'Height', 'Weight', ])

#jupyter Notebookで表示
df
2次元データの作成のアウトプット

CSVファイルの読み込み

CSVファイルからデータを読み込む場合は、以下のようにread_csv関数を使います。

# DataFrameの読み込み
df = pd.read_csv('df_test.csv')

CSVにラベルがないときは、namesを使って手動で指定できます。

#CSVにラベルがないときは、namesで指定する
df = pd.read_csv('df_test.csv',
                      names=['Name', 'Height', 'Weight'])

CSVファイルの書き込み

CSVファイルへの書き込み、以下のようにto_csvメソッドを使います。

日本語の場合は’cp-932’を使うのがおすすめですそのほか’shift_jis’でもOK。

# DataFrameの書き出し

df.to_csv('write.csv', index=False, encoding='cp932')

先頭行の表示

先頭行を確認したい場合は、head関数を使います。

引数には、表示したい行数を入力します。ちなみにデフォルトは5行になっている。

逆に末尾行を表示したい場合には、tail関数を使います。

# 先頭行の表示

df.head(2)
先頭行の表示のアウトプット

列の追加

DataFrameに列を追加したい場合は、以下のようにします。

#列の追加
df['Blood'] = ['A', 'B', 'O']

#jupyter Notebookで表示
df
列の追加のアウトプット

応用:演算してから列の追加

演算をかけた列を追加する場合は、以下のようにします。

# 演算結果を列として追加
df['BMI'] = df['Weight'] / (df['Height']/ (100))**2

#jupyter Notebookで表示
df
演算結果を列として追加をアウトプット

条件で絞り込み

DataFrameのデータを条件で絞り込む場合は以下のようにします。

ここでは、身長と体重に条件を付与しています。

# 条件で絞り込み
df_extruct = df[(df['Height'] >= 170) & (df['Weight'] >= 60)]

# jupyter Notebookで表示
df_extruct
条件で絞り込みのアウトプット

欠損データ(NaN)の取り扱い

ここでは欠損データの取り扱いについて実装例をみていきます。

Pandasで言う欠損値(NaN)とは、np.nanや、Noneのことです。

まずは欠損値を含むDataFrameを作成します。

# DataFrameの作成
df = pd.DataFrame([['伊藤', np.nan, 64], ['山田', 161,None], ['鈴木', 171, 62]],
                  columns=['Name', 'Height', 'Weight', ])

#jupyter Notebookで表示
df
DataFrameの作成のアウトプット

欠損値(NaN) を含む”行”を削除する場合

# 欠損値(NaN) を含む"行"を削除
df1 = df.dropna()
df1
df1

欠損値(NaN) を含む”列”を削除する場合

# 欠損値(NaN) を含む"列"を削除
df2 = df.dropna(axis=1)
df2
df2

欠損値(NaN)ではない値が3つ未満の”行”を削除する場合

# 欠損値(NaN)ではない値が3つ未満の"行"を削除
df3 = df.dropna(thresh=3) 
df3
df3

欠損値(NaN)ではない値の数に条件を付けて”行”を削除する場合

# 特定の列(身長)に欠損値(NaN)を含む"行"を削除
df4 = df.dropna(subset=["Height"])
df4
df4

scikit-learnによるデータ加工

ここでは、scikit-learnを使ってデータを加工する方法について説明します。

まず、例として使用するDataFrameを作成します。

# DataFrameの作成
df = pd.DataFrame([['伊藤', 'A'], ['山田', 'B'], ['鈴木', 'O']],
                  columns=['Name', 'Blood' ])

df
df

ダミー変数への変換

質的データをダミー変数に変換するには、sci-kitlearnのLabelEncoderクラスを使います。

下のように、DataFrameからダミー変数に変換したい列を配列として取り出して、fit_transformメソッドで変換します。

# 質的データをダミー変数に変換
from sklearn.preprocessing import LabelEncoder

# LabelEncoderオブジェクトを生成
encoder = LabelEncoder()
# fit_transformメソッドで、Blood列をダミー変数に変える
values = encoder.fit_transform(df['Blood'])
df_dummy = df
df_dummy['Blood'] = values

#jupyter Notebookで表示
df_dummy
df_dummy

one hot表示に変換

データ分析をしていると質的データをダミー変数で表して、one hot表示で使いたい場面が出てきます。

その方法は以下のとおり、scikit-learnのOneHotEncoderを使います。

from sklearn.preprocessing import OneHotEncoder

# one-hot化
encoder = OneHotEncoder(categories='auto')
# 1次元配列を2次元配列に変換してからエンコードする
result = encoder.fit_transform(values.reshape(-1, 1))

# one-hotエンコーディングされたデータをDataFrameに変換
df_onehot = pd.DataFrame(result.toarray(),
                         columns=sorted(list(set(df['Blood']))))

df_onehot
df_onehot

まとめ

今回は、Pandasの基本的な使い方について説明しました。

Pythonでデータ分析をするなら、Pandasを使いこなすことは必須です。

データ分析の最中にいちいちPandasの使い方を調べているようでは日が暮れてしまうので、ある程度の使い方は頭に入れておきたいですね。

参考

記事作成にあたって、以下のURLが参考になりました。

pandas documentation/pandas公式ドキュメント
→左上の検索窓から使い方を調べられます。

pandasで欠損値NaNを除外(削除)・置換(穴埋め)・抽出/note.nkmk.me
→欠損値の取り扱いについて日本語でよくまとまっています。

Pythonカテゴリの最新記事