2017-08-06 6 views
1

を使用して一つにマルチ行CSVファイルをマージIは、以下の辞書を持っている:パイソン

details = {"Primary_key" : [{'key_1': 'val', 'key_3': "val", 'key_5': ['val_1', 'val_2', 'val_3'], 'key_6': 'val'}, {'key_2': 'val', 'key_3': 'val', 'key_5': ['val_1','val_2'], 'key_6': 'val'}, {'key_1': 'val', 'key_2': 'val', 'key_3': 'val', 'key_4': 'val', 'key_5': ['val_1', 'val_2'], 'key_6': 'val'}] } 

I csvファイルにこれを変換する次のコードを有しています。

import pandas as pd 
    for name,val in details.items(): 
     df = pd.DataFrame.from_dict(details[name]) 
     df.index = [name]*len(df) 
     print df.index 
     with open("my_file.csv",'a') as f: 
      df.to_csv(f) 

ヘッダであるkey_x、PRIMARY_KEYテキストとして名前とvalであるが、私は次の出力(出力の一例)を得ました。 Output of the code

次の形式でCSVファイルを取得する方法はありますか? desired format

答えて

3

これはpd.concat(縦連結)のために良いユースケースである:

import pandas as pd 
df_list = [] 
for name,val in details.items(): 
    df = pd.DataFrame.from_dict(details[name]) 
    df.index = [name] * len(df) 
    df_list.append(df) 

pd.concat(df_list).fillna('').to_csv('my_file.csv') 

また、これは、空の文字列でNaNを交換するdf.fillna('')の使用を含むので、それはきれいに見えます。

+0

私はあなたの答えが好きです! +1 –

+0

@ScottBostonありがとうございました。我々はほとんど同じ答えを持っているので、私は好意を返すでしょう:) また、私はOPの 'name'インデックスを削除して間違えました。 –

3

IIUCこのようにデータフレームのリストを作成し、次にpd.concatを使用してそれらを垂直に連結して、Pandasがインデックス上で本質的なデータ整列を実行するので、列が意図したとおりに一致します。

list_of_dfs = {} 
for name,val in details.items(): 
     df = pd.DataFrame.from_dict(details[name]) 
     df.index = [name]*len(df) 
     list_of_dfs['name'] = df 

df_out = pd.concat(list_of_dfs) 
df_out.to_csv(f)