2017-12-19 7 views
0

ich einen Datenrahmen mit User Kommentare zu einem Film und möchten Beispiele analysieren, wenn ein Benutzer einen Film als „movie1“ beschreibt erfüllt „Film2“eine Funktion Spalte von Pandas Datenrahmen Nehmen

User id  Old id_New id Score Comments 
947952018 3101_771355141 3.0 If you want to see a comedy and have a stupid ... 
805407067 11903_18330  5.0 Argento?s fever dream masterpiece. Fairy tale ... 
901306244 16077_771225176 4.5 Evil Dead II meets Brothers Grimm and Hawkeye ... 
901306244 NaN_381422014 1.0 Biggest disappointment! There's a host of ... 
15169683 NaN_22471  3.0 You know in the original story of Pinocchio he... 

I Habe eine Funktion geschrieben, die einen Kommentar aufnimmt, das Wort "meets" findet und die ersten n Wörter vor und nach meets aufnimmt und (hoffentlich) die Essenz der Titel von movie2 zurückgibt, auf die ich später fuzzy match2 plane Titel in einem anderen Datenrahmen.

def parse_movie(comment, num_words): 
    words = comment.partition('meets') 
    words_before = words[0].split(maxsplit=num_words)[-num_words:] 
    words_after = words[2].split(maxsplit=num_words)[:num_words] 
    movie1 = ' '.join(words_before) 
    movie2 = ' '.join(words_after) 
    return movie1, movie2 

Wie kann ich diese Funktion auf der Kommentarspalte des ursprünglichen Pandas Datenrahmen anwenden und setze die zurück movie1 und Film2 Titel in separaten Spalten? Ich versuchte

df['Comments'].apply(parse_titles) 

aber dann kann ich nicht num_words spezifizieren, das ich verwenden möchte. Das direkte Arbeiten an der Spalte funktioniert auch nicht für mich, und ich bin mir nicht sicher, wie ich die neuen Filme in neue Spalten einfügen soll.

parse_movie(sample['Comments'], 4) 
AttributeError: 'Series' object has no attribute 'partition' 

Vorschläge würden geschätzt werden!

+0

Sie können Argumente mit 'apply()' übergeben, indem Sie das Argument 'args' verwenden. Sehen Sie sich die [docs] (https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.apply.html) an. –

Antwort

1

Basiert auf how to split column of tuples in pandas dataframe? Antwort. Dies kann mit Hilfe der Lambda-Funktion geschehen und angewendet werden (pd.Series). Speichern Sie die Ergebnisse in der Datenrahmenspalte "movie1" und "movie2".

num_words = 4 
df[['movie1','movie2']] = df['comments'].apply(lambda comment: parse_movie(comment, num_words)).apply(pd.Series) 
Verwandte Themen