山pの楽しいお勉強生活

勉強の成果を垂れ流していきます

オブジェクトの配列をPandasのDataFrameに変換する

背景とか

オブジェクト(エンティティとか、JavaBeansとか、DTOとか呼ばれる属性(フィールド)しか持たない奴)の配列をPandasのDataFrameに変更したメモです。
簡単にできそうだったけどできなかったので結局dictionaryに変換して突っ込みました。
PythonにもPandasにも詳しくないのですが、こういうケースはよくあると思ったのですが、あまりない??

コード

import pandas as pd

class Hoge:
    c1 = ''
    c2 = ''
    c3 = ''

    def __init__(self, *args):
        self.c1 = args[0]
        self.c2 = args[1]
        self.c3 = args[2]

hoge1 = Hoge('c1_1','c2_1','c3_1')
hoge2 = Hoge('c1_2','c2_2','c3_2')
hoge3 = Hoge('c1_3','c2_3','c3_3')

ar = [hoge1, hoge2, hoge3]

# 最初こんなのでできるかなと思ってました。
df1 = pd.DataFrame(ar)
print(df1) # 1列3行でHogeオブジェクトが設定される(当たり前)

# 最終的にこうなりました。
df2 = pd.DataFrame(list(map(lambda hoge: vars(hoge), ar)))
print(df2)