【入門】pandasの基本

pandasの基本 Seriesとは

Seriesは一次元のデータ扱うためのに用いられます。
サンプルコードを見てみましょう。

>>> import pandas as pd
>>> ser = pd.Series([1,2,3],index=["A","B","C"])
>>> ser
A    1
B    2
C    3
dtype: int64

左のABCがindex、右の値が要素(value)です。

DataFrameとは

行と列にラベルを持った二次元データです。
サンプルコードを見てみます。

>>> import pandas as pd
>>> df = pd.DataFrame([[1,2,3], [4,5,6]],index=["R1", "R2"],columns=["C1","C2","C3"])

>>> df
    C1  C2  C3
R1   1   2   3
R2   4   5   6

データの中身をみる

以下のようなDataFrameを使って説明していきます。

>>> df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9],[10,11,12]],index=["R1", "R2","R3","R4"],columns=["C1","C2","C3"])
>>> df
    C1  C2  C3
R1   1   2   3
R2   4   5   6
R3   7   8   9
R4  10  11  12

head : データの上の行から参照

headメソッドを使うとデータの上の行からデータを表示します。
引数を与えれば、上から引数分参照し、
引数がなければ、上から5つ参照します。

>>> df.head(2)
    C1  C2  C3
R1   1   2   3
R2   4   5   6

tail : データの下の行から参照

headメソッドを使うとデータの下の行からデータを表示します。
引数を与えれば、下から引数分参照し、
引数がなければ、下から5つ参照します。

>>> df.tail(2)
    C1  C2  C3
R3   7   8   9
R4  10  11  12

values : データの中身のみ参照

valuesはデータの中身だけ(index, columnなし)を参照します。

>>> df.values
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])

index : indexの参照

DataFrameのindexを参照します。

>>> df.index
Index(['R1', 'R2', 'R3', 'R4'], dtype='object')

columns : columnの参照

DataFrameのcolumnを参照します。

>>> df.columns
Index(['C1', 'C2', 'C3'], dtype='object')

describe : データの簡易的な統計データの表示

データの簡易的な統計データを出力します。

>>> df.describe()
              C1         C2         C3
count   4.000000   4.000000   4.000000
mean    5.500000   6.500000   7.500000
std     3.872983   3.872983   3.872983
min     1.000000   2.000000   3.000000
25%     3.250000   4.250000   5.250000
50%     5.500000   6.500000   7.500000
75%     7.750000   8.750000   9.750000
max    10.000000  11.000000  12.000000

カラム毎の統計データが出力されていることがわかります。

ちなみに、引数include、excludeなどを指定すれば、
さらに細かく要素を指定して統計データを表示することができます。
include、excludeに関しては以下のdocumentを参照してください。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.describe.html

データの抽出

whereメソッド

以下のDataFrameを使ってwhereメソッドを試します。

>>> df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9],[10,11,12]],index=["R1", "R2","R3","R4"],columns=["C1","C2","C3"])
>>> df
    C1  C2  C3
R1   1   2   3
R2   4   5   6
R3   7   8   9
R4  10  11  12

このDataFarmeから5より大きい要素だけwhereメソッドを使って取り出してみます。

>>> df.where(df > 5)
      C1    C2    C3
R1   NaN   NaN   NaN
R2   NaN   NaN   6.0
R3   7.0   8.0   9.0
R4  10.0  11.0  12.0

次にC1列が5より大きい行を取り出します。

>>> df.where(df["C1"] > 5)
      C1    C2    C3
R1   NaN   NaN   NaN
R2   NaN   NaN   NaN
R3   7.0   8.0   9.0
R4  10.0  11.0  12.0

loc

DataFrameの行の抽出を行います。
(indexが整数以外の時も使える)

>>> df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9],[10,11,12]],
                      index=["R1", "R2","R3","R4"],
                      columns=["C1","C2","C3"])
>>> df
    C1  C2  C3
R1   1   2   3
R2   4   5   6
R3   7   8   9
R4  10  11  12

>>> df.loc["R2"]    # R2行の抽出
C1    4
C2    5
C3    6
Name: R2, dtype: int64
>>> df.loc[["R2","R4"]]   # R2, R4行の抽出
    C1  C2  C3
R2   4   5   6
R4  10  11  12

iloc

DataFrameの各行や要素を取り出す時に用います。
iはintengerのi、indexの行数を指定して取り出します。

サンプルコードを見ていきます。

>>> df
    C1  C2  C3
R1   1   2   3
R2   4   5   6
R3   7   8   9
R4  10  11  12
>>> df.iloc[1]    # R2行目を取り出す
C1    4
C2    5
C3    6
Name: R2, dtype: int64
>>> df.iloc[[1,2]]  # R2, R3行を取り出す
    C1  C2  C3
R2   4   5   6
R3   7   8   9
>>> df.iloc[1,2]    # R2行C3列目の要素を取り出す
6

dropna:欠損値(NaN)の除外

dropnaは欠損値がある行を除外します。

>>> df
      C1    C2    C3
R1   NaN   NaN   NaN
R2   NaN   NaN   6.0
R3   7.0   8.0   9.0
R4  10.0  11.0  12.0

>>> df.dropna()
      C1    C2    C3
R3   7.0   8.0   9.0
R4  10.0  11.0  12.0

上記の例ではNaNがあるR1, R2が除外されていることがわかります。

欠損値を0で埋める場合は、

## 欠損値を埋める。以下は0で埋める
df.fillna(0)

データの書き込み・読み込み

json

jsonの書き込みは以下のコードでできます。

df.to_json(json_path)

jsonの読み込みは以下のコードでできます。

pd.read_path(json_path)

転置 T

転置は単純にdf.Tといった形でできます。

サンプルコードをを以下に示します。

>>> df
    C1  C2  C3
R1   1   2   3
R2   4   5   6
R3   7   8   9
R4  10  11  12

>>> df.T
    R1  R2  R3  R4
C1   1   4   7  10
C2   2   5   8  11
C3   3   6   9  12

isnull: NaNかどうかの確認

NaN(欠損値)のときにはTrueを出力します。

>>> df
      C1    C2    C3
R1   NaN   NaN   NaN
R2   NaN   NaN   6.0
R3   7.0   8.0   9.0
R4  10.0  11.0  12.0
>>> df.isnull()
       C1     C2     C3
R1   True   True   True
R2   True   True  False
R3  False  False  False
R4  False  False  False

mean:各列の平均を計算

各列の平均を計算する時はmeanメソッドを用います。

>>> df.mean()
C1    5.5
C2    6.5
C3    7.5
dtype: float64

pct_change:変化率を計算する

時系列データに対して、1つ前のデータとの変化率を計算する時にはpct_changeメソッドを用います。

>>> values = [1,2,1,4]
>>> s = pd.Series(values)
>>> s
0    1
1    2
2    1
3    4
dtype: int64

>>> result = s.pct_change()
>>> result
0    NaN
1    1.0
2   -0.5
3    3.0
dtype: float64

DataFrameでも同じように使うことができます。
デフォルトは列に対して変化率を求めます。

>>> A = [1,2,1,4]
>>> B = [5,1,4,5]
>>> df = pd.DataFrame({
...         "A":A,
...         "B":B})
...
>>> df
   A  B
0  1  5
1  2  1
2  1  4
3  4  5
>>> result = df.pct_change()
>>> result
     A     B
0  NaN   NaN
1  1.0 -0.80
2 -0.5  3.00
3  3.0  0.25

axis="columns"と設定することで行に対して
変化率を求めることができます。

>>> result = df.pct_change(axis="columns")
>>> result
    A     B
0 NaN  4.00
1 NaN -0.50
2 NaN  3.00
3 NaN  0.25

データの読み込み

csvデータを読み込む時にはread_csvメソッドを用います。

data = pd.read_csv("data.csv")

# encodingを指定したい時
data = pd.read_csv("data.csv", encoding="shift-jis")

reindex: indexを変更する

data = pd.read_csv("data.csv")

data = data.reindex([...])

data.index = new_index(例 df["new"])

日本語化

matplotlib.rcParams['font.family'] = "IPAGothic"

drop:不要な列や行を削除する

# 行の削除
df.drop(columns=["columns name"])

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop.html

参考文献

  1. PythonユーザのためのJupyter[実践]入門
タイトルとURLをコピーしました