Liebe alle,
ich habe eine Excel Tabelle mit den folgenden Spalten: Filename (Typ: Text), date_of_speech (Typ: Text), preprocessed_sentence_lda (Typ: Text; Ist vom Python Typ her eine Liste).
Nun habe ich in Gensim ein Topic-Model erstellt und will die Listen in preprocessed_sentence_lda analysieren.
Eine Liste sieht beispielsweise so aus:
['pleasure', 'conference', 'adoption', 'euro', 'day', 'euro', 'currency', 'circulation']
Nach Analyse einer Zeile in Excel (bzw. im Dataframe) durch Gensim erhalte ich folgendes Ergebnis:
[(0, 0.83270647275828491), (1, 0.16729352724171503)]
Es ist eine Liste mit Tupeln. Es kann natürlich sein, dass sich die Anzahl der Tupeln mit einem anderen Modell ändert. Je nach dem, ob es mehr oder weniger Topics gibt. Dabei
sind die Tupeln wie folgt aufgebaut: (Topic_Number, Topic_Probability). Es fängt für Number immer bei 0 an.
Was ich bisher unternommen habe ist, dass ich diese Tupeln erstmal in eine Dictionary umwandle:
{0: 0.8327064727582849, 1: 0.16729352724171503}
Die Frage ist nun:
Wie schaffe ich es, dass Pandas automatisch für jedes Key in der Dictionary eine gleichnamige Spalte erstellt und die zugehörigen Values in der richtigen Zelle einträgt?
Beispiel:
time preprocessed_sentence_lda Ergebnis (in dict umgewandelt;gerundet)
0 2013-01-01 ['pleasure', 'conference', 'adoption', 'euro', 'day', 'euro', 'currency', 'circulation'] {0: 0.83, 1: 0.17}
1 2013-01-02 ['progress', 'convergence', 'imbalance', 'account', 'balance', 'period', 'time'] {0: 0.55, 1: 0.45}
2 2013-01-03 ['context', 'process', 'deepening', 'place', 'country', 'development', 'investment'] {0: 0.87, 1: 0.13}
Mein Ziel ist:
time preprocessed_sentence_lda 0 1
0 2013-01-01 ['pleasure', 'conference', 'adoption', 'euro', 'day', 'euro', 'currency', 'circulation'] 0.83 0.17
1 2013-01-02 ['progress', 'convergence', 'imbalance', 'account', 'balance', 'period', 'time'] 0.55 0.45
2 2013-01-03 ['context', 'process', 'deepening', 'place', 'country', 'development', 'investment'] 0.87 0.13
EDIT: Leider ist hier die Formatierung der Tabelle zusammengebrochen, deswegen hier ein Screeni:
Vielen lieben Dank im Voraus!
Grüße
pytony
Pandas: Neue Spalten automatisch erstellen und mit Werten füllen
schau mal ob dir das hier hilft
Code: Alles auswählen
import pandas as pd
data = [['2013-01-01', ['pleasure', 'conference', 'adoption', 'euro', 'day', 'euro', 'currency', 'circulation'], {0: 0.83, 1: 0.17}],
['2013-01-02', ['progress', 'convergence', 'imbalance', 'account', 'balance', 'period', 'time'], {0: 0.55, 1: 0.45}],
['2013-01-03', ['context', 'process', 'deepening', 'place', 'country', 'development', 'investment'], {0: 0.87, 1: 0.13}]]
df = pd.DataFrame(data, columns=['date', 'labels', 'gensim'])
gensim = pd.DataFrame([value for value in df.gensim.values])
df.drop('gensim', axis=1, inplace=True)
final = pd.concat([df, gensim], axis=1)
final
Code: Alles auswählen
date labels 0 1
0 2013-01-01 [pleasure, conference, adoption, euro, day, eu... 0.83 0.17
1 2013-01-02 [progress, convergence, imbalance, account, ba... 0.55 0.45
2 2013-01-03 [context, process, deepening, place, country, ... 0.87 0.13
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Wobei sich der Teil mit gensim noch verkürzen lässt zu:
An der Stelle geht es ja eigentlich nur darum, die durch Pandas erzeugte Strukturierung zu ignorieren. Vielleicht gibt es da auch einen eleganteren Weg, der ohne die Liste auskommt. Ich wüsste das jetzt nicht auf Anhieb...
Code: Alles auswählen
gensim = pd.DataFrame(list(df.gensim))
Danke snafu, manchmal denkt man einfach zu umständlich.snafu hat geschrieben: ↑Donnerstag 24. Januar 2019, 06:14 Wobei sich der Teil mit gensim noch verkürzen lässt zu:.Code: Alles auswählen
gensim = pd.DataFrame(list(df.gensim))
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Besser tolist:
und damit in einem Schritt:
Code: Alles auswählen
pd.DataFrame(df.gensim.tolist())
Code: Alles auswählen
gensim = pd.DataFrame(df.pop('gensim').tolist())