2016-11-07 5 views
-1

私はpandasdataframeに次のデータをロードしようとしています:パンダ - 空DATAFRAME

jsons_data = pd.DataFrame(columns=['playlist', 'user', 'track', 'count']) 

for index, js in enumerate(json_files): 
    with open(os.path.join(path_to_json, js)) as json_file: 
    json_text = json.load(json_file) 
    #my json layout 
    user = json_text.keys() 
    playlist = 'all_playlists' 
    track = [p for p in json_text.values()[0]] 
    count = [p.values() for p in json_text.values()] 
    print jsons_data 

が、私はempty dataframeを得る:

[u'user1'] 
all_playlists 
[{u'Make You Feel My Love': 1.0, u'I See Fire': 1.0, u'High And Dry': 1.0, u'Fake Plastic Trees': 1.0, u'One': 1.0, u'Goodbye My Lover': 1.0, u'No Surprises': 1.0}] 
[[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]] 
[u'user2'] 
all_playlists 
[{u'Codex': 1.0, u'No Surprises': 1.0, u'O': 1.0, u'Go It Alone': 1.0}] 
[[1.0, 1.0, 1.0, 1.0]] 
[u'user3'] 
all_playlists 
[{u'Fake Plastic Trees': 1.0, u'High And Dry': 1.0, u'No Surprises': 1.0}] 
[[1.0, 1.0, 1.0]] 
[u'user4'] 
all_playlists 
[{u'No Distance Left To Run': 1.0, u'Running Up That Hill': 1.0, u'Fake Plastic Trees': 1.0, u'The Numbers': 1.0, u'No Surprises': 1.0}] 
[[1.0, 1.0, 1.0, 1.0, 1.0]] 
[u'user5'] 
all_playlists 
[{u'Wild Wood': 1.0, u'You Do Something To Me': 1.0, u'Reprise': 1.0}] 
[[1.0, 1.0, 1.0]] 
Empty DataFrame 
Columns: [playlist, user, track, count] 
Index: [] 

コードで何が間違っていますか?

EDIT:

jsonファイルはこのように構成されています

{ 
'user1':{ 
'Karma Police':1.0, 
'Roxanne':1.0, 
'Sonnet':1.0, 
'We Will Rock You':1.0, 
}} 
+1

DataFrameを値なしで初期化し、いくつかの列名を使用しました: '['playlist'、 'user'、 'track'、 'count']'ループ内の 'DataFrame'に一度も触れることはありません - どうすればそれに影響を与える可能性がありますか? –

+0

私は分かりません。勉強中です。多分あなたは私に教えることができました。 –

+0

これはチュートリアルサービスではありません。しかし、あなたは 'pandas' [チュートリアル](http://pandas.pydata.org/pandas-docs/stable/dsintro.html)を読むことをお勧めします。それはすぐに起動して実行する必要があります。 –

答えて

1

さて、最初のそれと遊ぶためにいくつかのダミーデータは、この問題の理解がはるかに容易になりますことから始めてみましょう:

# Dummy data to play with 
data1 = { 
'user1':{ 
    'Karma Police':1.0, 
    'Roxanne':1.0, 
    'Sonnet':1.0, 
    'We Will Rock You':1.0, 
    } 
} 

data2 = { 
'user2':{ 
    'Karma Police':1.0, 
    'Creep':1.0, 
    } 
} 

は、私たちは以下の使用します何かを説明してみましょう:

In : pd.DataFrame(data1).unstack() 

Out: 
user1 Karma Police  1.0 
     Roxanne    1.0 
     Sonnet    1.0 
     We Will Rock You 1.0 
dtype: float64 

# This is where you would normally iterate on the files 
mylist = [] 
for data in [data1, data2]: 
    # Make a dataframe then unstack, 
    # producing a series with a 2-multiindex as above 
    # And append it to the lsit 
    mylist.append(pd.DataFrame(data).unstack()) 

は、今、私たちはそのリストをCONCAT、および

merged = pd.concat(mylist) 
# Renaming to get the right column names 
merged.index.names = ['User', 'Track'] 
merged.name = 'Count' 
# Transpose to a dataframe instead of a Series 
merged = merged.to_frame() 
# Adding a new column with the same value throughout 
merged['Playlist'] = 'all_playlists' 


merged 
をクリーンアップの少しを行いますあなたはこのようにそれを好きではない場合は、その後、reset_indexを呼び出すことができます

Output

:アウト

+0

素晴らしい、ありがとう –

0

ループの最後で、単に追加:

jsons_data.loc[index] = [playlist, user, track, count] 

を、それが出力します。

playlist     user \ 
0 decaf   [user1] 
1 decaf   [user2] 
2 decaf   [user3] 
3 decaf   [user4] 
4 decaf   [user5] 

               track \ 
0 [Make You Feel My Love, I See Fire, High And D... 
1    [Codex, No Surprises, O, Go It Alone] 
2 [Fake Plastic Trees, High And Dry, No Surprises] 
3 [No Distance Left To Run, Running Up That Hill... 
4  [Wild Wood, You Do Something To Me, Reprise] 

            count 
0 [[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]] 
1     [[1.0, 1.0, 1.0, 1.0]] 
2      [[1.0, 1.0, 1.0]] 
3   [[1.0, 1.0, 1.0, 1.0, 1.0]] 
4      [[1.0, 1.0, 1.0]] 
+2

これは、いいえで動作するのはかなり難しいですか?完全にパンダを使用してポイントを打つ –

+0

@JulienMarrecデータ分析は、最もフレンドリーな環境ではありません。しかし、いったん重い重量がこのフレームワークによって取り除かれると、データをプロットし、データ(「SQLite」など)をエクスポートすることはかなり簡単です。 –

関連する問題