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月です。心機一転していきたいですね。