2017-12-05 8 views
0

DataFrameの各行について、avroスキーマのいくつかの値を出力したいと思います。私はこのような何かのDataFrameを持っています。私は神社テンプレートDataFrameを使用してJinjaを使用して条件付きでドキュメントを作成するにはどうすればよいですか?

のための入力を作成したいデータフレーム内の行ごとに

import pandas as pd 

x = pd.DataFrame({'column' : ['id','type','time'] 
    , 'desc': ['the sk',' the type' , 'epoch time'] 
    ,'nullable':[False, False, True]}) 

print x 

だから私の出力は次のようになります。

{ 
name  : "id" 
description: "the sk" 
} 
{ 
name  :"type" 
description:"the type" 
} 
{ 
name  :"time","null" 
description:"epoch time" 
} 

私はそれをどのように行うことができますか?また、私のデータフレームの他の列の値に基づいて結果を条件付きで入れ子にしたいと思います。

答えて

0

DataFramedictに変換するのは解決策だと思います。私はorient='records'を使用してレンダリングに適したdictを取得します。

from jinja2 import Template 

# Template definition 
template = Template("""{% for row in data %} 
{ 
name: {{ row['column'] }}{{ ', null' if row['nullable'] }} 
description: {{ row['desc'] }} 
} 
{% endfor %}""") 

# Rendering 
print(template.render(name='John Doe', data=x.to_dict(orient='records'))) 

# { 
# name: id 
# description: the sk 
# } 
# 
# { 
# name: type 
# description: the type 
# } 
# 
# { 
# name: time, null 
# description: epoch time 
# } 
+0

私はそれを行っていましたが、私が問題に遭遇したところでは、条件付きでテンプレートに値を追加しています。たとえば、df [nullable]がtrueの場合はnullを追加します。 – spacewolf

+0

この場合、Jinjaで '{{'null' if row ['nullable']}}'のように実装する必要があります。私は私の答えを更新しました。 – Romain

+0

TYあなたの助けを借りて – spacewolf

関連する問題