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