如何访问数据帧中的列列表中的字典键值

2024-10-03 19:33:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含多个列的数据框,如key\u id、name、score、outcome&;类别原因。 category_reasons列为每个key_id保存如下值。对于某些key_id,它将只有一个category&;其他值将有多个类别&;值如下所示 如何创建一个新列,使其仅包含类别字段的类别值,作为新列Sample Input/Output类别1中的列表。 请参阅嵌入式系统,以便查看示例输入&;需要输出。 有人能帮我解决这个问题吗

[{'category': 'A', 'value': ['12']},
 {'category': 'B', 'value': ['13a']},
 {'category': 'C', 'value': ['14c']}]

Sample Input/output


Tags: 数据samplekeynameidinputoutputvalue
1条回答
网友
1楼 · 发布于 2024-10-03 19:33:21

获取密钥:

您只需创建一个新列,如下所示:

df["new_category_reasons"] = [','.join(l.keys()) for l in [OrderedDict(d) for  d in df["category_reasons"]]]

或者,如果不想创建新列,只需指定现有列:

df["category_reasons"] = [','.join(l.keys()) for l in [OrderedDict(d) for  d in df["category_reasons"]]]
  • 从“category_reasons”列中的每个字典中获取OrderedDict,并用“,”连接键,以获取以逗号分隔的键字符串

  • 您需要OrderedDict以保留密钥顺序,然后获取第一个密钥。否则,您可能会将value作为d.keys()中的第一个键。有时,正如您所知keys()是一个本质上无序的集合

例如:

import pandas as pd
from pandas import Series,DataFrame
data = [[1,[{'categoryA': 'A', 'value': ['12']},
 {'categoryB': 'B', 'value': ['13a']},
 {'categoryC': 'C', 'value': ['14c']}]], [2,[{'categoryA':'A', 'value':['12']}, {'categoryB':'B', 'value':['13a']}]]]
df = pd.DataFrame(data, columns = ["key_id","category_reasons"])
from collections import OrderedDict
df['new_category_reasons'] = [','.join(l.keys()) for l in [OrderedDict(d) for  d in df["category_reasons"]]]

输出:

key_id  category_reasons    new_category_reasons
0   1   [{'categoryA': 'A', 'value': ['12']}, {'catego...   categoryA,categoryB,categoryC
1   2   [{'categoryA': 'A', 'value': ['12']}, {'catego...   categoryA,categoryB

获取值:

要获取值,例如[A、B、C],可以执行以下操作:

  • 您可以定义一个函数,从每个“类别\原因”中存在的字典列表中提取值,如:
    def get_category_values(category_list):
        l = []
        for d in category_list:
            od = OrderedDict(d)
            l.append(od[list(od.keys())[0]])
        return l
  • 将此函数与列表理解一起使用,以获取新列“category_reason1”,如:
    df['category_reason1'] = [get_category_values(category_list) for category_list in df['category_reasons']]

输出:

key_id  category_reasons    category_reason1
0   1   [{'categoryA': 'A', 'value': ['12']}, {'catego...   [A, B, C]
1   2   [{'categoryA': 'A', 'value': ['12']}, {'catego...   [A, B]

相关问题 更多 >