2017-11-09 19 views
1

配列を含む配列であるJsonファイルを持っています 以下のコードですべての "パーツ"を取得できますが、入れ子配列内の異なるレベルを抽出するjson_normalize parms ?JSONファイルのネストされた配列からDataframeにデータを抽出

つまり、私はあなたが必要だと思うすべての部分配列を持つモデル配列からの 'ID' を持つ車両の配列から 'ID'

car | camry | "value":"engine","price":10.82 

おかげ

f = open('sample.json') 
data = json.load(f) 
f.close() 
df1 = json_normalize(data['vehicle'], 'model') 
df2 = df1[['parts']] 
ddf = pd.DataFrame(columns=['value','charge']) 

for (index,row) in df2.iterrows(): 
    if pd.notnull(row[0]): 
     e = row[0] 
     ddf.loc[index] = [e[0]['value'], e[0]['charge']] 


{ 
"vehicle":[ 
{ 
"id":"car", 
"model":[ 
{ 
    "id":"camry", 
"parts": [ 
{ 
"value":"engine", 
"charge":10.82 
} ] } 
, 
{ 
    "id":"avelon", 
"parts": [ 
{ 
"value":"seats", 
"charge":538.26 
} ] } 
, 
{ 
    "id":"prius", 

"parts": [ 
{ 
"value":"seats", 
"charge":10.91 
} ] } 
, 
{ 
    "id":"corolla", 
    "markup": { 
    "value":"61" 
} 
, 
    "accessories": [ 
{ 
    "value":"vvvvv" 
    }] 

} ] } ] } 

答えて

1

をしたい:

#remove NaNs 
s = df1['parts'].dropna() 
#create new DataFrame, assuming only one list always 
df2 = pd.DataFrame(s.str[0].values.tolist(), index=s.index) 
print (df2) 
    charge value 
0 10.82 engine 
1 538.26 seats 
2 10.91 seats 

#join to original 
df = df1[['id']].join(df2) 
print (df) 
     id charge value 
0 camry 10.82 engine 
1 avelon 538.26 seats 
2 prius 10.91 seats 
3 corolla  NaN  NaN 
+0

感謝をフォローアップ - 「パーツ」アレイに複数の部品がある場合、つまりキャリがエンジンとシートを持っている場合、どのように処理するのでしょうか? ' – user1111928

+0

あなたは' [、{ "値": "engine1"、 "充電" 9.43} { : "エンジン"、 "充電" 10.82 "の値を"}]と思いますか? – jezrael

+0

それは何が必要なのか - 列の別のペア?しかし、長さがdictsのリストと異なる場合、NaNs行を別の行に取得します。それとも別のものが必要ですか? – jezrael

関連する問題