Mam słownika słowników w postaci:tworzyć pandy dataframe ze słownika słowników
{'user':{movie:rating} }
Na przykład
{Jill': {'Avenger: Age of Ultron': 7.0,
'Django Unchained': 6.5,
'Gone Girl': 9.0,
'Kill the Messenger': 8.0}
'Toby': {'Avenger: Age of Ultron': 8.5,
'Django Unchained': 9.0,
'Zoolander': 2.0}}
chcę przekonwertować ten dict z dicts w dataframe pandy z kolumna 1 nazwa użytkownika i inne kolumny oceny filmów, tj.
user Gone_Girl Horrible_Bosses_2 Django_Unchained Zoolander etc. \
Howev Niektórzy użytkownicy nie oceniają filmów, więc te filmy nie są uwzględnione w wartościach() dla tego klucza użytkownika(). Byłoby miło w takich przypadkach po prostu wypełnić wpis z NaN.
Jak teraz, I iteracyjne nad klucze, wypełnić listę, a następnie użyć tej listy, aby utworzyć dataframe:
data=[]
for i,key in enumerate(movie_user_preferences.keys()):
try:
data.append((key
,movie_user_preferences[key]['Gone Girl']
,movie_user_preferences[key]['Horrible Bosses 2']
,movie_user_preferences[key]['Django Unchained']
,movie_user_preferences[key]['Zoolander']
,movie_user_preferences[key]['Avenger: Age of Ultron']
,movie_user_preferences[key]['Kill the Messenger']))
# if no entry, skip
except:
pass
df=pd.DataFrame(data=data,columns=['user','Gone_Girl','Horrible_Bosses_2','Django_Unchained','Zoolander','Avenger_Age_of_Ultron','Kill_the_Messenger'])
Ale to tylko daje mi dataframe użytkowników, którzy ocenili wszystkie filmy w zbiór.
Moim celem jest dołączenie do listy danych poprzez iterację nad etykietami filmów (zamiast powyższego podejścia typu "brute force"), a po drugie, utworzenie ramki danych zawierającej wszystkich użytkowników i umieszczenie wartości pustych w elementach, które mają nie mają ocen filmów.
Czy istnieje sposób na zmianę nazwy użytkownika na pojedynczą kolumnę zamiast indeksu? – Feynman27
pd.DataFrame.from_dict (d, orient = 'index'). Reset_index() –
Świetnie. Dziękuję Ci! – Feynman27