代码之家  ›  专栏  ›  技术社区  ›  roberto.sannazzaro

从一系列字典中获取第一个值

  •  1
  • roberto.sannazzaro  · 技术社区  · 7 年前

    我有一个熊猫系列 orders['customer'] 看起来是这样的:

    0      {'id': 454543543533, 'email': 'aaaaaa@gmail.com...
    1      {'id': 437890767654, 'email': 'bbbbbbbb@mail.com...
    2      {'id': 534764345453, 'email': 'ccccccccc@mail.com..
    3      {'id': 345436564353, 'email': None, 'accepts_m....
    4      {'id': 671341215803, 'email': None, 'accepts_m...
    5      {'id': 671317065787, 'email': None, 'accepts_m...
    

    我想迭代这个系列的行,得到每个字典的第一个元素( id )此外,我想用ID替换序列中的值。

    我尝试了许多不同的解决方案,最后一个,但我不能使这件事发挥作用:

    for i in range(len(orders_df['customer'].values.tolist())):
        orders_df['customer'] = orders_df['customer'].values.tolist()[i]
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   jezrael    7 年前

    使用 lambda 函数与 get 对于匹配值,如果字典带有键 id 否则返回默认值,此处 0 :

    orders_df = pd.DataFrame({'customer':[{'id': 454543543533, 'email': 'fdgr@gmail.com'}, 
                                          {'id': 437890767654, 'email': 'ereffewf@mail.com'},
                                          {'email': 'ereffewf@mail.com'}]})
    print (orders_df)
                                                customer
    0    {'id': 454543543533, 'email': 'fdgr@gmail.com'}
    1  {'id': 437890767654, 'email': 'ereffewf@mail.c...
    2                     {'email': 'ereffewf@mail.com'}
    
    orders_df['customer'] = orders_df['customer'].apply(lambda x: x.get('id', 0))
    

    或:

    orders_df['customer'] = [x.get('id', 0) for x in orders_df['customer']]
    

    print (orders_df)
           customer
    0  454543543533
    1  437890767654
    2             0