Bestimmen Sie einzigartigen Wörterbuch Schlüssel in Reihen

stimmen
1

Ich habe einen Datenrahmen, wo jede Zeile ein Wörterbuch ist jedoch die Schlüssel in jedem Wörterbuch variieren. Ich möchte über jede Zeile zu durchlaufen und eine Liste mit allen eindeutigen Schlüssel zu bekommen. Wer weiß, wie dies zu tun?

Ich habe versucht, diesen Code

np.unique(np.array(train.totals.apply(lambda x: ast.literal_eval(x).keys())))

Aber dies ergibt eine einzigartige Kombination von dict_keys (), nicht eindeutigen Kombinationen von Schlüsseln.

Zum Beispiel können sagen, ich zwei Reihen haben. Wie oben erwähnt, sind die Spaltenwerte für jede Zeile ein Wörterbuch. Die Wörterbuchschlüssel für Zeile 1 sind Obst und Gemüse, und die Wörterbuchschlüssel für die Zeile 2 sind Obst, Gemüse und Getreide.

Der obige Code würde produzieren

dict_keys(['fruit','vegetable']) 

und

dict_keys(['fruit','vegetable','grain']) 

Aber was ich möchte, dass die Ausgabe zu sein ist nur eine Liste oder ein Array mit Obst, Gemüse und Getreide (der eindeutige Schlüssel über die Reihen zu sehen).

Edit: Screenshot von Datenrahmen hinzugefügt Bild Beschreibung hier eingeben

edit2: Codebeispiel unten

import pandas as pd 
import numpy as np
import ast

dummy_data = [['A',str({pageviews:1,hits:1})],['B',str({pageviews:1,visits:1})]]
dummy_df = pd.DataFrame(dummy_data,columns = ['ID','totals'])

np.unique(np.array(dummy_df.totals.apply(lambda x: ast.literal_eval(x).keys())))
Veröffentlicht am 07/11/2018 um 23:36
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
2

Nur laufen und zu einem Satz hinzuzufügen:

In [1]: import pandas as pd
   ...: import numpy as np
   ...: import ast
   ...:
   ...: dummy_data = [['A',str({"pageviews":"1","hits":"1"})],['B',str({"pageviews":"1","visits":"1"})]]
   ...: dummy_df = pd.DataFrame(dummy_data,columns = ['ID','totals'])
   ...:
   ...:

In [2]: dummy_df
Out[2]:
  ID                             totals
0  A    {'pageviews': '1', 'hits': '1'}
1  B  {'pageviews': '1', 'visits': '1'}

In [3]: uniq = set()
   ...: for x in dummy_df.totals:
   ...:     uniq.update(ast.literal_eval(x))
   ...:

In [4]: uniq
Out[4]: {'hits', 'pageviews', 'visits'}

Wahrscheinlich das beste können Sie die Struktur Ihrer Daten gegeben haben.

Beantwortet am 08/11/2018 um 00:07
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more