python:如何在DataFrame中修改dictonaries?

时间:2017-04-30 19:59:00

标签: python dictionary dataframe

如何修改数据框内的列表值?我正在尝试调整JSON收到的数据,DataFrame如下: 数据框在一个列表中有“多个字典”。

   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}]

如果我只想在选项中使用'a'和'c'键/值,我该如何修改数据名?预期的结果是

       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}]

我尝试过滤但我无法将值分配给数据框

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

2 个答案:

答案 0 :(得分:2)

使用嵌套列出的理解:

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

如果你想使用for循环,那就像是:

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

答案 1 :(得分: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}]