データフレームしたい(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["測定値"]