2017-08-28 1 views
1

Ich muss eine Features aus einem Dataset, das ich aus einer .json-Datei importiert habe, hinzufügen.Extrahieren von Wörterbuchwerten aus einem Pandas-Datenframe

Dies ist, wie es aussieht:

f1 = pd.read_json('https://raw.githubusercontent.com/ansymo/msr2013-bug_dataset/master/data/v02/eclipse/short_desc.json') 

print(f1.head()) 


               short_desc 
1  [{'when': 1002742486, 'what': 'Usability issue... 
10  [{'when': 1002742495, 'what': 'API - VCM event... 
100  [{'when': 1002742586, 'what': 'Would like a wa... 
10000 [{'when': 1014113227, 'what': 'getter/setter c... 
100001 [{'when': 1118743999, 'what': 'Create Help Ind... 

Im Wesentlichen I ‚short_desc‘ als Spaltennamen nehmen müssen, und mit den String-Werte direkt darunter füllen: ‚Usability Ausgabe ...

Bisher habe ich folgendes versucht: das

f1['desc'] = pd.DataFrame([x for x in f1['short_desc']]) 

Wrong number of items passed 19, placement implies 1 

gibt es eine einfache Art und Weise zu erreichen, ohne die Verwendung von Schleifen? Könnte jemand diesen Neuling in die richtige Richtung weisen?

Antwort

3

Initialisieren Sie einen Datenrahmen nicht und versuchen Sie, ihn einer Spalte zuzuordnen - Spalten sollen pd.Series sein. mit operator und pd.Series.apply

f1['desc'] = [x[0]['what'] for x in f1['short_desc']] 

Als Alternative würde ich eine Lösung keine Lambda-Funktionen beteiligt, schlagen:

import operator 

f1['desc'] = f1.short_desc.apply(operator.itemgetter(0))\ 
          .apply(operator.itemgetter('what')) 
print(f1.desc.head()) 

1   Usability issue with external editors (1GE6IRL) 
10     API - VCM event notification (1G8G6RR) 
100  Would like a way to take a write lock on a tea... 
10000  getter/setter code generation drops "F" in "..... 
100001 Create Help Index Fails with seemingly incorre... 
Name: desc, dtype: object 

Sie sollten nur die Liste Verständnis direkt zuweisen, wie dies

+0

Dies ist, was mich verrückt macht, warum ist es, dass wir die 1, 10, 100, etc .. und keine 'short_desc' und die Spaltenüberschrift bekommen. – JohnWayne360

+0

@ JohnWayne360 Weil Sie eine Serie ausdrucken. Probiere 'print (df.head())'. Du wirst es verstehen. –

+0

@ JohnWayne360 Interessanterweise scheint der Index zu kommen, wenn Sie ihn vom Weblink laden. Möchten Sie es zurücksetzen? Do 'f1 = f1.reset_index (drop = 1)' –

2

oder Sie können versuchen, apply (PS: apply betrachten als eine Zeit Kostenfunktion)

f1['short_desc'].apply(pd.Series)[0].apply(pd.Series) 

Out[864]: 
                what  when who 
1   Usability issue with external editors (1GE6IRL) 1002742486 21 
10     API - VCM event notification (1G8G6RR) 1002742495 10 
100  Would like a way to take a write lock on a tea... 1002742586 24 
10000 getter/setter code generation drops "F" in "..... 1014113227 331 
100001 Create Help Index Fails with seemingly incorre... 1118743999 9571 
+1

Danke, diese Antwort wird mir nützlich sein, wenn ich versuche, das "wann" mit "was" später zu verbinden. Sehr geschätzt! – JohnWayne360

+0

@ JohnWayne360 Gern geschehen – Wen

Verwandte Themen