初心者のためのpython入門

自分がつまづいたところやつまづきやすいところを中心に書いていきます。また、役に立つライブラリの紹介などをしていきます。

pandas~DataFrame~編

前書き

前回は、pandasライブラリのSeriesについて説明しました。今回は、DataFrameについて説明します。

データフレーム(DataFrame)

データフレームは、テーブル形式のデータ構造となります。イメージとしては、エクセルのように行と列の両方にインデックスを持つ2次元配列のようなオブジェクトです。

データフレームの作成

データフレームの作成には様々な方法があります。基本的な作成方法は、リスト型を値としてもつディクショナリを使います。この際、ディクショナリの各要素のリストは全て同じ長さでなければいけません。

# sample.py
import pandas as pd

data = {'Language': ['Python', 'C++', 'Java',], # 文字列
        'Year': [1991, 1983, 1995], # 数値
        'Static': [False, True, True]} # 真偽値
df = pd.DataFrame(data)

print(df)
# 実行結果
  Language  Static  year
0   Python   False  1991
1      C++    True  1983
2     Java    True  1995

実行結果は上記のようになります。ディクショナリからデータフレームが作成できたことがわかると思います。また、

データフレームの作成~インデックスを添えて~

データフレームもシリーズと同じようにインデックスを指定し、作成することができます。

import pandas as pd

data = {'Language': ['Python', 'C++', 'Java',],
        'Year': [1991, 1983, 1995],
        'Static': [False, True, True]}
df = pd.DataFrame(data, index=['one', 'two', 'three']) # インデックスを指定

print(df)

実行結果はほとんど同じなので省略します。

データフレームの作成~列の順番の指定~

データフレームは列の順番を指定することができます。

import pandas as pd

data = {'Language': ['Python', 'C++', 'Java',],
        'Year': [1991, 1983, 1995],
        'Static': [False, True, True]}
df = pd.DataFrame(data, index=['one', 'two', 'three'], columns=['Language', 'Year', 'Static']) # columnsで列の順番を指定

print(df)
データの抽出
行列の指定方法
loc 行ラベル・列ラベル
iloc 行番号・列番号
import pandas as pd

data = {'Language': ['Python', 'C++', 'Java',],
        'Year': [1991, 1983, 1995],
        'Static': [False, True, True]}
df = pd.DataFrame(data, index=['one', 'two', 'three'], columns=['Language', 'Year', 'Static'])

print(df.loc[['two']]) # 'two'行を抽出
print(df.loc[:, 'Year']) # 'Year'列を抽出
print(df.loc['one', 'Language']) # 'one'行、'Language'列を抽出

print(df.iloc[:,1]) # 1列目を抽出
print(df.iloc[[1]]) # 1行目を抽出 
print(df.iloc[1, 2]) # 1行2列目抽出
# print(df.loc[['two']])
    Language  Year  Static
two      C++  1983    True
# print(df.loc[:, 'Year']) 
one      1991
two      1983
three    1995
Name: Year, dtype: int64
# print(df.loc['one', 'Language'])
Python
# print(df.iloc[:,1])
one      1991
two      1983
three    1995
# print(df.iloc[[1]])
Name: Year, dtype: int64
    Language  Year  Static
two      C++  1983    True
# print(df.iloc[1, 2])
True

実行結果は上記のようになります。適切に行や列を抽出できていることがわかります。

  • 補足
    • 上記の例で"[[]]"と"[]"で要素を指定しているものがあります。これらによる違いは抽出されるデータ型です。"[[]]"を使った場合はDataFrame型、"[]"を使った場合はSeries型となります。
import pandas as pd

data = {'Language': ['Python', 'C++', 'Java',],
        'Year': [1991, 1983, 1995],
        'Static': [False, True, True]}
df = pd.DataFrame(data, index=['one', 'two', 'three'], columns=['Language', 'Year', 'Static'])

print(type(df.iloc[[1]]))
print(type(df.iloc[1]))
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.series.Series'>

実行結果を見るとデータ型が違うことがわかります。型を変換せずに使いたい時は、"[]"を使いましょう。

後書き

お疲れ様でした。データ型についての説明は終わりです。次は、pandasのより詳しい使い方について説明します。
そういえば、明日から4月です。心機一転していきたいですね。