データフレームしたい(pandas.DataFrame
)
1data = pd.DataFrame(リスト型オブジェクト)
2data = pd.DataFrame(辞書型オブジェクト)
pd.DataFrameでデータフレームを作成できます。
データフレームはPandas
の基本的なデータ構造で、
行(インデックス)と列(カラム)で構成されています。
スプレッドシートのような表構造を頭に思い浮かべて、 行に対する操作なのか、列に対する操作なのか、 を意識すると扱いやすいと思います。
辞書型を変換したい
1import random
2import pandas as pd
3
4n = 1000
5samples = {
6 "x": [random.gauss() for i in range(n)],
7 "y": [random.uniform(4, 8) for i in range(n)],
8 "z": [random.randint(0, 10) for i in range(n)],
9}
10
11data = pd.DataFrame(samples)
12data
リスト型の値を持つ辞書型オブジェクト(dict[str, list]型
)は、そのままデータフレームに変換できます。
辞書型オブジェクトのキーがカラム名になります。
辞書型リストを変換したい
1import random
2import pandas as pd
3
4# 100行 x 3列のデータ
5# [
6# {"x": 値11, "y": 値12, "z": 値13},
7# {"x": 値21, "y": 値22, "z": 値23},
8# {"x": 値31, "y": 値32, "z": 値33},
9# {"x": 値41, "y": 値42, "z": 値43},
10# ...
11# ]
12samples = [{"x": random.gauss(), "y": random.randint(3, 10), "z": random.uniform(5, 20)} for i in range(100)]
13data = pd.DataFrame(samples)
測定データが辞書型でまとめてある辞書型リスト(list[dict]型
)は簡単にデータフレームに変換できます。
辞書のキーがカラム名になります。
ヒント
一般的に、pd.Series
型/pd.DataFrame
型への変換は時間がかかります。
複数のイベントを連続で処理する場合は、個々のステップの返り値は辞書型で返し、最後に変換するとよいです。
リスト型リストを変換したい
1import random
2import pandas as pd
3
4# 100行 x 3列 のデータ
5# [
6# [値11, 値12, 値13],
7# [値21, 値22, 値23],
8# [値31, 値32, 値33],
9# [値41, 値42, 値43],
10# ...,
11# ]
12samples = [[random.gauss(), random.randint(3, 10), random.uniform(5, 20)] for i in range(100)]
13data = pd.DataFrame(samples, columns=["x", "y", "z"])
測定データがリスト型でまとめてあるリスト型リスト(list[list]型
)は簡単にデータフレームに変換できます。
columns
オプションを使ってカラム名を変更できます。
辞書型を変換したい
1samples = {
2 "x": [値11, 値21, 値31, 値41, ...],
3 "y": [値12, 値22, 値32, 値42, ...],
4 "z": [値13, 値23, 値33, 値43, ...],
5}
6pd.DaraFrame(samples)
データを確認したい
1data.head()
2data.tail()
カラムを取り出したい
1data["カラム名"]
2data["カラム名"][開始:終了]
[]
アクセサを使って、カラムを取り出せます。
さらに[開始:終了]
で行方向にスライスできます。
行を取り出したい
1data.loc[開始:終了]
2data.loc[開始:終了, "カラム名"]
pandas.DataFrame.locを使って、データフレームを行方向にスライスできます。
また.loc
を使うと、取り出した行の値を変更できます。
たとえば、ある閾値を越えた測定値を取り出したい場合、次のように書きます。
1name = "有効値"
2data[name] = 0
3isT = data["測定値"] > 閾値
4data.loc[isT, name] = data["測定値"]