【问题标题】:pandas split list like object熊猫拆分列表,如对象
【发布时间】:2021-09-24 16:16:55
【问题描述】:

您好,我有这列名为labels的数据:

    [{'id': 123456,
      'name': John,
      'age': 22,
      'pet': None,
      'gender': male,
      'result': [{'id': 'vEo0PIYPEE',
        'type': 'choices',
        'value': {'choices': ['Same Person']},
        'to_name': 'image',
        'from_name': 'person_evaluation'}]}]

    [{'id': 123457,
      'name': May,
      'age': 21,
      'pet': None,
      'gender': female,
      'result': [{'id': zTHYuKIOQ',
        'type': 'choices',
        'value': {'choices': ['Different Person']},
        'to_name': 'image',
        'from_name': 'person_evaluation'}]}]
......

不确定这是什么类型,我想分解一下,提取值 [Same Person],结果应该是这样的:

0                      [Same Person]
1                      [Different Person]
....

我应该如何做到这一点?

【问题讨论】:

    标签: pandas dataframe split


    【解决方案1】:

    根据您提供的有限数据,这可行吗?

    df['labels_new'] = df['labels'].apply(lambda x: x[0].get('result')[0].get('value').get('choices'))
    
                                                  labels          labels_new
    0  [{'id': 123456, 'name': 'John', 'age': 22, 'pe...       [Same Person]
    1  [{'id': 123457, 'name': 'May', 'age': 21, 'pet...  [Different Person]
    

    您也可以使用以下方法,但我发现 dict.get() 更通用(例如返回默认值)并且具有更好的异常处理能力。

    df['labels'].apply(lambda x: x[0]['result'][0]['value']['choices'])
    

    您可以考虑使用pd.json_normalize(阅读更多here),但对于您拥有的列的当前状态,使用它提取数据会有点复杂,而不是简单地使用@987654328 @

    【讨论】:

    • 是的,它可以工作。我可以对此进行一些解释吗?这个专栏是什么类型的?我尝试 .dtype 它作为对象返回..
    • 是的,它是熊猫识别的对象。更具体地说,它是一个复杂的嵌套列表/字典数据结构,类似于 json。根据熊猫documentation ... Columns with mixed types are stored with the object dtype
    • 你只需要访问列表中的元素,然后是字典,按顺序访问你想要从中提取值的键。就像我在我的方法中所做的那样跨度>
    • 如果有帮助,请随时标记答案:) 我已经编辑了我之前的评论,以为您添加更多上下文。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2018-10-10
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    相关资源
    最近更新 更多