如何使用矢量化操作从Pandas Dataframe 创建特定的嵌套格式JSON或字典?

a2mppw5e  于 2022-12-30  发布在  其他
关注(0)|答案(3)|浏览(117)

我正在尝试进行一个API调用。对于这个特定的API,JSON文件中的一个键需要有一个嵌套的字典。
以下是 Dataframe 格式的输入数据:

ID        Date        Total_Transactions   Amount    Account_Name__c
1234567   2022-12-21  1                    235.00    a1234567
2345678   2022-13-21  2                    300.50    a2345678

最终结果需要如下所示,并且在嵌套字典之外有一个键“Account_Name__r”:

[{'ID': '1234567',
  'Date': '2022-12-21',
  'Total_Transactions': 1,
  'Amount': 235.00,
  'Account_Name__r': {'Account_Name__c':'a1234567'}},
{'ID': '2345678',
  'Date': '2022-13-21',
  'Total_Transactions': 2,
  'Amount': 300.50,
  'Account_Name__r': {'Account_Name__c':'a2345678'}}]

数据来自一个 Dataframe 。我可以得到一个正常的 Dataframe 来正确地导出,但是嵌套有问题。下面是当我把正常的 Dataframe 作为一个正常的json时的样子:
代码:

final.to_json(orient='records')

输出:

[{'ID': '1234567',
  'Date': '2022-12-21',
  'Total_Transactions': 1,
  'Amount': 235.00,
  'Account_Name__c':'a1234567'},
{'ID': '2345678',
  'Date': '2022-13-21',
  'Total_Transactions': 2,
  'Amount': 300.50,
  'Account_Name__c':'a2345678'}]

你知道我需要如何构建 Dataframe 吗?我需要使用什么转换/函数来获得顶部的嵌套结构?我希望通过在panda中执行矢量化操作和df.to在panda中使用www.example.com _json()方法来实现这一点。
我不是在寻找for循环解决方案,这很简单,但实际上并不能帮助我学习如何从Pandas Dataframe 创建不同类型的复杂JSON结构,而且在我的情况下,对于我将使用的大型数据集来说,它是不可伸缩的。

mutmk8jj

mutmk8jj1#

试试看:

out = df.to_dict(orient="records")

for d in out:
    d["ID"] = str(d["ID"])
    d["Account_Name__r"] = {"Account_Name__c": d.pop("Account_Name__c")}

print(out)

图纸:

[
    {
        "ID": "1234567",
        "Date": "2022-12-21",
        "Total_Transactions": 1,
        "Amount": 235.0,
        "Account_Name__r": {"Account_Name__c": "a1234567"},
    },
    {
        "ID": "2345678",
        "Date": "2022-13-21",
        "Total_Transactions": 2,
        "Amount": 300.5,
        "Account_Name__r": {"Account_Name__c": "a2345678"},
    },
]
mrwjdhj3

mrwjdhj32#

试试这个:

data=[{'ID': '1234567',
  'Date': '2022-12-21',
  'Total_Transactions': 1,
  'Amount': 235.00,
  'Account_Name__c':'a1234567'},
{'ID': '2345678',
  'Date': '2022-13-21',
  'Total_Transactions': 2,
  'Amount': 300.50,
  'Account_Name__c':'a2345678'}]

df=pd.DataFrame(data)

df["Account_Name__r"]=df["Account_Name__c"].apply(lambda x: {"Account_Name__c":x})

df.drop(columns=["Account_Name__c"],inplace=True)

print(df.to_json(orient='records'))
z31licg0

z31licg03#

我把这个问题分解成一个更小的问题来解决,我把这个问题贴在这里:Is there a way to store a dictionary on each row of a dataframe column using a vectorized operation?
用户Panda Kim因解决了初始问题而获得奖励:https://stackoverflow.com/users/20430449/panda-kim
这是使用Pandas金使用的答案以及我拼凑起来的最后一步所需的解决方案。
首先,我们在 Package 的字典之外为一个新列命名,该列的名称是稍后将使用的键,我们将通过使用. T方法转置列名"Account_Name__c"及其对应值,并使用to_dict()将其设置为字典来获取该列的值

final_insert['Account_Name__r'] = pd.Series(final_insert[['Account_Name__c']].T.to_dict())

结果是:

ID      Date       Total_Transactions Account_Name__r
1234567 2022-12-21 1                  {'Account_Name__c':'a1234567'}

最后,我们使用. to_dict()或. to_json()将整个 Dataframe 转换为字典或json

final_insert = final_insert.to_dict(orient='records')

结果是:

[{'ID': '1234567',
  'Date': '2022-12-21',
  'Total_Transactions': 1,
  'Amount': 235.00,
  'Account_Name__r': {'Account_Name__c':'a1234567'}}]

相关问题