Open In Colab

DataFrame#

DataFrameはインデックスと呼ばれるラベルを持った列ごとに同一のデータ型を持つ2次元のデータです。 DataFrame オブジェクトを生成するには Series クラスの引数に次のようなデータを渡します。

  • 構造化、均質なデータ

    • リスト

    • タプル

    • numpy.ndarray

  • 辞書

    • list-likeオブジェクト

    • dataclass

    • Series

  • イテラブルオブジェクト

  • DataFrame

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

次のコードでは DataFrame オブジェクトを生成しています。

import numpy as np
import pandas as pd

df = pd.DataFrame([[1, 2], [10, 20]])  # list
df = pd.DataFrame(((1, 2)), ((10, 20)))  # tuple
df = pd.DataFrame(np.array((((1, 2)), ((10, 20)))))  # ndarray

type() を実行すると、 DataFrame 型であることが確認できます。

type(df)
pandas.core.frame.DataFrame

標準出力やREPLにはデータのインデックス(ラベル)と値が表示されます。デフォルトではインデックスは自動で0からの自然数が割り当てられます。

DataFrameの場合は行と列それぞれにインデックスが割り振られます。

print(df)
    0   1
0   1   2
1  10  20

DataFrameはREPLではHTMLのデーブルにレンダリングされます。

df
0 1
0 1 2
1 10 20

次のコードではコンストラクタに辞書を渡してDataFrameを生成しています。この場合、辞書のキーが列のインデックス(ラベル)となります。

pd.DataFrame({"col1": [1, 2], "col2": [10, 20]})
col1 col2
0 1 10
1 2 20

次のコードではコンストラクタにイテラブルオブジェクトである range オブジェクトを渡してDataFrameを生成しています。

pd.DataFrame([range(2), range(10, 12)])
0 1
0 0 1
1 10 11

次のコードではコンストラクタにSeriesを渡してDataFrameを生成しています。データが存在しない値はNaN(欠損値)で埋められます。

pd.DataFrame([pd.Series([1, 2]), pd.Series(2)])
0 1
0 1.0 2.0
1 2.0 NaN

値とインデックス#

DataFrameから値を取得するには values 属性にアクセスします。値は numpy.ndarray 型で管理されます。

df.values
array([[ 1,  2],
       [10, 20]])

DataFrameから 行の インデックス(ラベル)を取得するには index 属性にアクセスします。

df.index
RangeIndex(start=0, stop=2, step=1)

DataFrameから 列の インデックス(ラベル)を取得するには columns 属性にアクセスします。

df.columns
RangeIndex(start=0, stop=2, step=1)

生成したDataFrameからインデックスを変更するには index 属性および columns 属性にarray-likeオブジェクトを代入します。

df.index = ["r1", "r2"]
df.columns = ["c1", "c2"]
df
c1 c2
r1 1 2
r2 10 20

練習問題1#

次のようなDataFrameを生成してください。

item price
0 apple 120
1 orange 100
2 banana 15
# 解答セル

データ型の確認、変換#

DataFrameのデータ型を確認するには dtypes 属性にアクセスします。

df
c1 c2
r1 1 2
r2 10 20
df.dtypes
c1    int64
c2    int64
dtype: object

DataFrameのデータ型を変換するには astype メソッドの引数にデータ型を渡します。データ型はNumPyまたはpandasのデータ型を指定します。

データ型は列ごとに指定する必要があります。 astype メソッドの引数には列名をキー、データ型を値とした辞書を渡します。

df.astype({"c1": "float64"})
c1 c2
r1 1.0 2
r2 10.0 20
df.astype({"c1": float}).dtypes
c1    float64
c2      int64
dtype: object

練習問題2#

df オブジェクトの「1」列を int32 に変換してください。

# 解答セル