DataFrame
Contents
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 に変換してください。
# 解答セル