Seite 1 von 1

Pandas: Neue Spalten automatisch erstellen und mit Werten füllen

Verfasst: Mittwoch 23. Januar 2019, 11:09
von pytony
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: Bild

Vielen lieben Dank im Voraus!

Grüße
pytony

Re: Pandas: Neue Spalten automatisch erstellen und mit Werten füllen

Verfasst: Mittwoch 23. Januar 2019, 14:47
von ThomasL
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

Re: Pandas: Neue Spalten automatisch erstellen und mit Werten füllen

Verfasst: Mittwoch 23. Januar 2019, 22:03
von pytony
Hallo Thomas!

Vielen lieben Dank für deine Hilfe. Du hast mir sehr geholfen!

Ich wünsche dir einen guten Abend!

Beste Grüße

pytony

Re: Pandas: Neue Spalten automatisch erstellen und mit Werten füllen

Verfasst: Donnerstag 24. Januar 2019, 06:14
von snafu
Wobei sich der Teil mit gensim noch verkürzen lässt zu:

Code: Alles auswählen

gensim = pd.DataFrame(list(df.gensim))
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...

Re: Pandas: Neue Spalten automatisch erstellen und mit Werten füllen

Verfasst: Donnerstag 24. Januar 2019, 07:23
von ThomasL
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))
.
Danke snafu, manchmal denkt man einfach zu umständlich.

Re: Pandas: Neue Spalten automatisch erstellen und mit Werten füllen

Verfasst: Donnerstag 24. Januar 2019, 09:01
von Sirius3
Besser tolist:

Code: Alles auswählen

pd.DataFrame(df.gensim.tolist())
und damit in einem Schritt:

Code: Alles auswählen

gensim = pd.DataFrame(df.pop('gensim').tolist())