0
votes

Comment puis-je transformer une série de listes de dictionnaires en ataframe?

J'ai le Dataframe suivant. Colonne Genres est une liste de plusieurs dictionnaires.

     Title   Name
     Avatar  Action
     Avatar  Adventure
     Avatar  Fantasy
     Avatar  Science Fiction
     Pirates.. Adventure
     Pirates.. Fantasy
     ...


4 commentaires

S'il vous plaît, montrez-nous ce que vous avez essayé jusqu'à présent. De cette façon, les gens peuvent vous aider avec le problème efficacement.


Après avoir pensé et googling pendant 2 heures, je n'ai malheureusement aucune idée de la façon de vous approcher. Comment puis-je clarifier plus ce dont j'ai besoin?


D'où vient ces données, pourquoi est-ce dans le Dataframe comme ça?


J'ai téléchargé un fichier CSV de kaggle.com. Le format est apparemment dans cette forme déjà dans le fichier CSV.


4 Réponses :


1
votes
            title   genres
0   Avatar  Action
0   Avatar  Adventure
0   Avatar  Fantasy
0   Avatar  Science Fiction
1   Pirates of the Caribbean: At World's End    Adventure
1   Pirates of the Caribbean: At World's End    Fantasy
1   Pirates of the Caribbean: At World's End    Action
2   Spectre Action
2   Spectre Adventure
2   Spectre Crime
3   The Dark Knight Rises   Action
3   The Dark Knight Rises   Crime
3   The Dark Knight Rises   Drama
3   The Dark Knight Rises   Thriller
4   John Carter Action
4   John Carter Adventure
4   John Carter Science Fiction

3 commentaires

Je me demande comment avez-vous obtenu ces titre et genres pour commencer? Par la main? Modification de l'OP?


@Sergeybushmanov Oui, je devais. Il aurait été plus facile si je pouvais utiliser pd.read_clipboard ou stringio


Merci beaucoup. Cela fonctionne, maintenant j'essaie de comprendre comment ce travail en expansion.



2
votes

Supposons que nous ayons un df: xxx

alors nous pouvons faire: xxx


4 commentaires

Oh, df.explode au lieu d'exploser une série! +1


Désolé, lorsque j'utilise Atkilat90's Dataframe, votre cordon fonctionne parfaitement bien. Mais quand je crée mon Dataframe à partir de mon fichier de données original avec 'df = imdb [["Titre",' Genres ']]] "Ensuite, j'obtiens" Les indices de chaîne doivent être des erreurs d'entiers de votre code à partir de votre code. Pouvez-vous penser à une raison? Merci!


Comment créez-vous votre Dataframe IMDB? Si vous lisez vos données du disque, vous devez utiliser importer ast; imdb = pd.read_csv (filepath, converties = {"Genres": ast.literal_eval}); . Sinon, vous obtiendrez une liste de dictionnaires comme une chaîne. D'où votre erreur.


Woww. Merci beaucoup. Je comprends ça. Je pouvais voir la différence savoir lors de la vérification du type d'une ligne de série de genres. Avec votre méthode, je reçois une liste, sinon juste une chaîne.



0
votes

Je ferais cela:

df.melt(id_vars="title",value_vars=df.columns[1:],value_name="name")[["title","name"]].dropna().set_index("title").sort_index()



                 name
title
Avatar            Action
Avatar         Adventure
Avatar           Fantasy
Avatar   Science Fiction
Spectre           Action
Spectre        Adventure
Spectre            Crime


0 commentaires

0
votes
for index, row in df.iterrows():
    title = row['title']
    gn = row['genres']
    genres = ast.literal_eval(gn)

    for i in range(0, len(genres)):
        r_list = []
        r_list.append(title)
        r_list.append(genres[i]['name'])
        df_list.append(r_list)

out_df = pd.DataFrame(df_list,columns=['Title','Name'])
print(out_df.head)

0 commentaires