gpt4 book ai didi

python - 以合理的方式将字典列表转换为数据框

转载 作者:行者123 更新时间:2023-12-02 18:09:29 25 4
gpt4 key购买 nike

zendesk api 以字典列表的形式返回字段,但每个列表都是单个记录。我想知道是否有更好的方法将其全部转换为数据框。如果它是字典的字典那么 json_normalize处理它没有问题。

警告:并非所有记录都具有相同的字段 ID

示例数据:

data = [{
"ticket_id": 4,
"customer_id": 8,
"created_at": "2022-05-01",
"custom_fields": [
{
"id": 15,
"value": "website"
},
{
"id": 16,
"value": "broken"
},
{
"id": 23,
"value": None
},
],
'group_id': 42
}]

运行任何形式的 Dataframe,from_records , from_json ,或json_normalize给出了我想要的大部分内容,但列表位于一列中:

t_df = pd.json_normalize(data)
t_df

输出:

<表类=“s-表”><标题>ticket_idcustomer_idcreated_at自定义字段group_id <正文>0482022-05-01[{'id': 15, 'value': '网站'}, {'id': 16, 'v...42

我当前的(可能不明智的)解决方案是:

t_df = pd.DataFrame(sample_df.at[0, 'custom_fields']).T.reset_index(drop=True)
t_df.rename(columns=t_df.iloc[0], inplace=True)
t_df.drop(0, inplace=True)
t_df.reset_index(drop=True, inplace=True)
pd.merge(left=sample_df, left_index=True,
right=t_df, right_index=True).drop(columns='custom_fields')

这会产生正确的记录,我可以将其附加到主数据帧:

<表类=“s-表”><标题>ticket_idcustomer_idcreated_atgroup_id151623 <正文>0482022-05-0142网站损坏无

我担心的是,我需要对大约 25,000 条记录执行此操作,这看起来既缓慢又脆弱(容易损坏)。

最佳答案

您应该首先处理数据/字典,然后才用它构造一个 DataFrame。它将使您的生活变得更轻松,并且比尝试使用 pandas 操作数据(即创建 DataFrame 之后)更快。

import pandas as pd

data = [{
"ticket_id": 4,
"customer_id": 8,
"created_at": "2022-05-01",
"custom_fields": [
{
"id": 15,
"value": "website"
},
{
"id": 16,
"value": "broken"
},
{
"id": 23,
"value": None
},
],
'group_id': 42
}]

custom_fields = data[0].pop('custom_fields')
data[0].update({rec['id']: rec['value'] for rec in custom_fields})

t_df = pd.DataFrame(data)

输出:

>>> t_df 

ticket_id customer_id created_at group_id 15 16 23
0 4 8 2022-05-01 42 website broken None

关于python - 以合理的方式将字典列表转换为数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72650553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com