2017-04-30 1 views
1

Wie kann ich einen Listenwert in Datenrahmen ändern? Ich versuche, Daten anzupassen, die von JSON empfangen werden, und der Datenrahmen ist wie folgt: Der Datenrahmen hat 'mehrere Wörterbücher' in einer Liste.python: Wie man Diktate in einem DataFrame ändert?

Dataframe df: 
     id options 
    0 0  [{'a':1 ,'b':2, 'c':3, 'd':4},{'a':5 ,'b':6, 'c':7, 'd':8}] 
    1 1  [{'a':9 ,'b':10, 'c':11, 'd':12},{'a':13 ,'b':14, 'c':15, 'd':16}] 
    2 2  [{'a':9 ,'b':10, 'c':11, 'd':12},{'a':17 ,'b':18, 'c':19, 'd':20}] 

Wenn ich will nur ‚a‘ verwenden und ‚c‘ Schlüssel/Wert-in-Optionen, wie ich datafames ändern kann? Das erwartete Ergebnis würde

sein
 Dataframe df: 
     id options 
    0 0  [{'a':1 ,'c':3},{'a':5 ,'c':7}] 
    1 1  [{'a':9, 'c':11},{'a':13,'c':15}] 
    2 2  [{'a':9 ,'c':11},{'a':17,c':19}] 

Ich habe versucht, Filterung, aber ich konnte den Wert auf die Datenrahmen

for x in totaldf['options']: 
    for y in x: 
     y = {a: y[a], 'c': y['c']} ...? 

Antwort

2

Mit verschachtelten aufgelistet Verständnis nicht zuordnen:

df['options'] = [[{'a': y['a'], 'c': y['b']} for y in x] for x in df['options']] 

Wenn Sie ein verwenden wollte Für eine Schleife wäre es etwas wie:

new_options = [] 
for x in df['options']: 
    row = [] 
    for y in x: 
     row.append({a: y[a], 'c': y['c']}) 
    new_options.append(row) 

df['options'] = new_options 
+0

danke für beide Antworten! Ich habe beide Fälle getestet. Ich werde den Umgang mit Daten im Auge behalten. – hyon

1
# An alternative vectorized solution. 
df.options = df.options.apply(lambda x: [{k:v for k,v in e.items() if k in['a','c']} for e in x]) 

Out[398]: 
    id         options 
0 0  [{'a': 1, 'c': 3}, {'a': 5, 'c': 7}] 
1 1 [{'a': 9, 'c': 11}, {'a': 13, 'c': 15}] 
2 2 [{'a': 9, 'c': 11}, {'a': 17, 'c': 19}] 
Verwandte Themen