2017-08-24 26 views
1

Ich habe eine Excel-Datei mit Usertyp, ID und Beschreibung der Eigenschaften. Ich habe diese Datei in Python Pandas im Dataframe (df) importiert.Pandas Dataframe Spalte Wert Split

Jetzt möchte ich den Inhalt in Beschreibung in ein Wort, zwei Wörter und drei Wörter teilen. Ich bin in der Lage, ein Wort Tokenization mit Hilfe der NLTK-Bibliothek zu tun. Aber ich stecke für die Tokenisierung mit zwei und drei Wörtern fest. Zum Beispiel hat eine der Reihen in der Spalte Description Satz-

Ein brandneues Wohn-Apartment in Mumbai Hauptstraße mit tragbaren Wasser.

Ich mag dieser Satz als

"A Brand" aufgeteilt werden, "Brand new", "neues Wohn", "Wohnhaus" .... "portable Wasser".

Und diese Aufspaltung sollte in jeder Zeile dieser Spalte widerspiegeln.

Image of my dataset in excel format

+1

Wie über Sie 1) nicht Bilder posten 2) schreiben Sie keine Links zu Bildern 3) viel weniger Links zu Bildern von _excel_ Daten. –

+0

Und lesen Sie: http://StackOverflow.com/Questions/20109391/How-to-make-good-reproducible-pandas-examples –

+1

Es gibt eine 'Ngrams' Funktion in Nltk, die dies ziemlich einfach macht, ein Argument für die Zahl von Wörtern, die Sie zusammen gruppieren möchten – kev8484

Antwort

1

Hier ist ein kleines Beispiel ngrams vom nltk verwenden. Hoffe, es hilft:

from nltk.util import ngrams 
from nltk import word_tokenize 

# Creating test dataframe 
df = pd.DataFrame({'text': ['my first sentence', 
          'this is the second sentence', 
          'third sent of the dataframe']}) 
print(df) 

Eingang dataframe:

text 
0 my first sentence 
1 this is the second sentence 
2 third sent of the dataframe 

Jetzt können wir ngrams zusammen mit word_tokenize für bigrams und trigrams und Angewandt auf jede Zeile des Datenrahmen verwenden. Für Bigramm übergeben wir den Wert 2 an die ngrams-Funktion zusammen mit den tokenisierten Wörtern, während der Wert 3 für die Trigramme übergeben wird. Das von ngrams zurückgegebene Ergebnis ist vom Typ generator, also wird es in Liste konvertiert. Für jede Zeile wird die Liste der bigrams und trigrams in verschiedenen Spalten gespeichert.

df['bigram'] = df['text'].apply(lambda row: list(ngrams(word_tokenize(row), 2))) 
df['trigram'] = df['text'].apply(lambda row: list(ngrams(word_tokenize(row), 3))) 
print(df) 

Ergebnis:

     text \ 
0   my first sentence 
1 this is the second sentence 
2 third sent of the dataframe 

                bigram \ 
0       [(my, first), (first, sentence)] 
1 [(this, is), (is, the), (the, second), (second, sentence)] 
2 [(third, sent), (sent, of), (of, the), (the, dataframe)] 

                trigram 
0          [(my, first, sentence)] 
1 [(this, is, the), (is, the, second), (the, second, sentence)] 
2  [(third, sent, of), (sent, of, the), (of, the, dataframe)] 
Verwandte Themen