create pandas dataframe from dictionary of dictionaries

后端 未结 2 1913
醉梦人生
醉梦人生 2020-12-13 12:32

I have a dictionary of dictionaries of the form:

{\'user\':{movie:rating} }

For example,

{Jill\': {\'Avenger: Age of Ultro         


        
相关标签:
2条回答
  • 2020-12-13 12:56

    You can pass the dict of dict to the DataFrame constructor:

    In [11]: d = {'Jill': {'Django Unchained': 6.5, 'Gone Girl': 9.0, 'Kill the Messenger': 8.0, 'Avenger: Age of Ultron': 7.0}, 'Toby': {'Django Unchained': 9.0, 'Zoolander': 2.0, 'Avenger: Age of Ultron': 8.5}}
    
    In [12]: pd.DataFrame(d)
    Out[12]:
                            Jill  Toby
    Avenger: Age of Ultron   7.0   8.5
    Django Unchained         6.5   9.0
    Gone Girl                9.0   NaN
    Kill the Messenger       8.0   NaN
    Zoolander                NaN   2.0
    

    Or use the from_dict method:

    In [13]: pd.DataFrame.from_dict(d)
    Out[13]:
                            Jill  Toby
    Avenger: Age of Ultron   7.0   8.5
    Django Unchained         6.5   9.0
    Gone Girl                9.0   NaN
    Kill the Messenger       8.0   NaN
    Zoolander                NaN   2.0
    
    In [14]: pd.DataFrame.from_dict(d, orient='index')
    Out[14]:
          Django Unchained  Gone Girl  Kill the Messenger  Avenger: Age of Ultron  Zoolander
    Jill               6.5          9                   8                     7.0        NaN
    Toby               9.0        NaN                 NaN                     8.5          2
    
    0 讨论(0)
  • 2020-12-13 12:56

    This brute-force approach also appears to work, but iterating over the movie labels would still be more robust in my opinion.

    data=[] 
    for i,key in enumerate(movie_user_preferences.keys() ):
        try:            
            data.append((key
                        ,movie_user_preferences[key]['Gone Girl'] if 'Gone Girl' in movie_user_preferences[key] else 'NaN'
                        ,movie_user_preferences[key]['Horrible Bosses 2'] if 'Horrible Bosses 2' in movie_user_preferences[key] else 'NaN'
                        ,movie_user_preferences[key]['Django Unchained'] if 'Django Unchained' in movie_user_preferences[key] else 'NaN'
                        ,movie_user_preferences[key]['Zoolander'] if 'Zoolander' in movie_user_preferences[key] else 'NaN'
                        ,movie_user_preferences[key]['Avenger: Age of Ultron'] if 'Avenger: Age of Ultron' in movie_user_preferences[key] else 'NaN'
                        ,movie_user_preferences[key]['Kill the Messenger'] if 'Kill the Messenger' in movie_user_preferences[key] else 'NaN' ))
    
        # if no entry, skip
        except:
            pass
    
    
     user Gone_Girl Horrible_Bosses_2  Django_Unchained Zoolander  \
     0      Sam         6                 3               7.5         7   
     1      Max        10                 6               7.0        10   
     2   Robert       NaN                 5               7.0         9   
     3     Toby       NaN               NaN               9.0         2   
     4    Julia       6.5               NaN               6.0       6.5   
     5  William         7                 4               8.0         4   
     6     Jill         9               NaN               6.5       NaN   
    
     Avenger_Age_of_Ultron Kill_the_Messenger  
     0                   10.0                5.5  
     1                    7.0                  5  
     2                    8.0                  9  
     3                    8.5                NaN  
     4                   10.0                  6  
     5                    6.0                6.5  
     6                    7.0                  8  
    
    0 讨论(0)
提交回复
热议问题