LoginSignup
5
6

More than 3 years have passed since last update.

【Python】10分で完全に理解するpandas

Last updated at Posted at 2020-01-25

10分で分かるpandas

はじめに

この記事はpandas公式チュートリアル「10 minutes to pandas」の写経及び解説です

以下のURLを参考にしています
https://pandas.pydata.org/pandas-docs/stable/getting_started/10min.html

環境

  • Python3.7
  • Jupyter Lab

とりあえずインポート

import numpy as np
import pandas as pd
np
pd

以下のように各モジュールが表示されればOK
スクリーンショット 2020-01-25 11.51.03.png

エラーが起きた場合

ModuleNotFoundError: No module named 'pandas'と怒られる場合、まずpandasを入れます。


---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-1-59ab05e21164> in <module>
      1 import numpy as np
----> 2 import pandas as pd

ModuleNotFoundError: No module named 'pandas'

コマンド
python -m pip install pandas


1. オブジェクトを作る

Seriesクラスにリストを入れることで簡単にデータを作ることが出来ます。


# 簡単に一列作る
s = pd.Series(data=[1, 3, 5, np.nan, 6, 8])
s

スクリーンショット 2020-01-25 12.05.34.png

date_range()を使うことで、特定の期間の日付の行を作成出来ます。


# 2020年1月1日から6日間のデータ
dates = pd.date_range("20200101", periods=6)
dates

スクリーンショット 2020-01-25 12.14.36.png

pandasのDataFrameクラス引数indexを指定することで、行インデックスを指定することが出来ます。

# 行インデックスに2020年1月1日からのデータを指定
# 各値にはランダムな数値を入れる
df = pd.DataFrame(np.random.randn(6, 4), index=dates)
df

スクリーンショット 2020-01-25 12.20.49.png

また、同じくDataFrameクラスの
引数columnsを指定することで列名を設定することが出来ます。

# 列名ABCDを設定
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list("ABCD"))
df

スクリーンショット 2020-01-25 13.54.51.png

DataFrameクラスに辞書型のデータを渡すことで、辞書型のキーの部分が列名になります。

df2 = pd.DataFrame(
    {
        "A": 1.,
        "B": pd.Timestamp("20200101"),
        "C": pd.Series(1, index=list(range(4)), dtype="float32"),
        "D": np.array([3] * 4, dtype="int32"),
        "E": pd.Categorical(["test", "train", "test", "train"]),
        "F": "foo",
    }
)
df2

スクリーンショット 2020-01-25 14.08.34.png

dtypes属性に参照することで各列のデータ属性が分かります。

df2.dtypes

スクリーンショット 2020-01-25 14.10.58.png

Jupyter nootbookやJupyter Labなどを使っている場合、列名がタブ補完で表示されます。

db2.<TAB>

スクリーンショット 2020-01-25 14.13.28.png

2. データを表示する

DataFrameクラスのhead()メソッドを使うことでデータの先頭部を表示できます。

df.head(2)

スクリーンショット 2020-01-25 14.21.33.png

同じくDataFrameクラスのtail()を使うことでデータの後尾部を表示できます。

df.tail(2)

スクリーンショット 2020-01-25 14.35.10.png

DataFrameクラスのindexを参照することでそのデータの行インデックスを表示出来ます。

df.index
df2.index

スクリーンショット 2020-01-25 14.36.33.png

DataFrameクラスのto_numpy()を使うことでデータをnumpyで操作しやすいデータに変換できます。

df.to_numpy()
df2.to_numpy()

スクリーンショット 2020-01-25 15.25.48.png

DataFrameクラスの参考:DataFrame.describe()を使うことで、データの各列の簡単な統計を取ることができます。

df2.describe()

スクリーンショット 2020-01-25 15.44.36.png

DataFrameクラスのT属性を参照すると、行列入れ替えたデータにアクセスできます。

df.T

スクリーンショット 2020-01-25 15.48.59.png

また、DataFrameクラスのtranspose()でも同じく行列の入れ替えを取得できます。

df.transpose()

スクリーンショット 2020-01-25 16.00.49.png

DataFrameクラスのsort_index()を使用することで、行全体もしくは列全体の並び替えを行うことができます。

df.sort_index()

スクリーンショット 2020-01-25 16.10.23.png

引数axisに0もしくは"index"を設定すると行に、1もしくは"columns"を設定すると、列を軸に並び替えします(デフォルト値0)。また、引数ascendingにFalseを指定すると並び順が降順になります(デフォルト値True)。


df.sort_index(axis=0, ascending=False)
df.sort_index(axis=1, ascending=False)

スクリーンショット 2020-01-25 16.12.40.png

DataFrameクラスのsort_values()を使用することで行単位もしくは列単位に並び替えを行うことができます。

df.sort_values(by="B")
df.sort_values(by="2020-01-01", axis=1)

スクリーンショット 2020-01-25 16.45.17.png

(2020-03-07追記)

3. データを選択する

単純なデータ取得

df["A"]もしくはdf.Aとすることで、指定した一列を取得することができます。

df["A"]
df.A

image.png

リスト[]で指定した場合、Pythonのスライス操作で列や行を選択することができます

# 先頭4列表示
df[0:3]

image.png

リインデックスの範囲を取得することもできます。


# 2020年1月2日から2020年1月4日まで表示
df['20200102':'20200104'] 

image.png

ラベルを指定してデータを選択する

DataFrameクラスのloc()にインデックス(今回の場合dates)を指定することで、行を列として選択することができます。


df.loc[dates]
df.loc[dates[0]]

image.png

loc()を使うことで、複数列を選択することができます。


df.loc[:, ["A", "B"]]

image.png

先頭のコロンがない場合エラーになるみたいです。

image.png

loc()スライス操作を組み合わせることで複数行、複数列選択することができます。

df.loc['20200102':'20200104', ['A', 'B']]

image.png

loc()にインデックスを指定することで単体データを取得できます

df.loc[dates[0], 'A']

image.png

at()を使うことでより高速に単体データを取得することができます

df.at[dates[0], 'A']

image.png

位置を指定してデータを選択する

DataFrameクラスのiloc()を使うことで、数値を指定してデータ選択することが出来ます。

df.iloc[3]
df.iloc[3:5, 0:2]
df.iloc[[1, 2, 4], [0, 2]]

image.png

DataFrameクラスのiloc()の引数に開始位置終了位置を省略したスライス(:のみ)を指定することで、特定の全行 or 全列を取得できます

df.iloc[1:3, :]
df.iloc[:, 1:3]

image.png

DataFrameクラスのiloc()に引数にを数値のみ指定することで、単体データの選択ができます

df.iloc[1, 1]

image.png

at()と同様、iat()使うことでより高速に単体データを取得することができます

df.at[dates[0], 'A']

image.png

条件判定によるデータ選択

(ここで力尽きる。残り……多くない?10分とは:thinking:

4. 欠損データ
5. 操作
6. マージ
7. グルーピング
8. 再構築
9. 時系列
10. カテゴリー化
11. プロット
12. データの入力と出力
13. 落とし穴

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6