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

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

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

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

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

  1. [{'ID': '1234567',
  2. 'Date': '2022-12-21',
  3. 'Total_Transactions': 1,
  4. 'Amount': 235.00,
  5. 'Account_Name__r': {'Account_Name__c':'a1234567'}},
  6. {'ID': '2345678',
  7. 'Date': '2022-13-21',
  8. 'Total_Transactions': 2,
  9. 'Amount': 300.50,
  10. 'Account_Name__r': {'Account_Name__c':'a2345678'}}]

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

  1. final.to_json(orient='records')

输出:

  1. [{'ID': '1234567',
  2. 'Date': '2022-12-21',
  3. 'Total_Transactions': 1,
  4. 'Amount': 235.00,
  5. 'Account_Name__c':'a1234567'},
  6. {'ID': '2345678',
  7. 'Date': '2022-13-21',
  8. 'Total_Transactions': 2,
  9. 'Amount': 300.50,
  10. 'Account_Name__c':'a2345678'}]

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

mutmk8jj

mutmk8jj1#

试试看:

  1. out = df.to_dict(orient="records")
  2. for d in out:
  3. d["ID"] = str(d["ID"])
  4. d["Account_Name__r"] = {"Account_Name__c": d.pop("Account_Name__c")}
  5. print(out)

图纸:

  1. [
  2. {
  3. "ID": "1234567",
  4. "Date": "2022-12-21",
  5. "Total_Transactions": 1,
  6. "Amount": 235.0,
  7. "Account_Name__r": {"Account_Name__c": "a1234567"},
  8. },
  9. {
  10. "ID": "2345678",
  11. "Date": "2022-13-21",
  12. "Total_Transactions": 2,
  13. "Amount": 300.5,
  14. "Account_Name__r": {"Account_Name__c": "a2345678"},
  15. },
  16. ]
展开查看全部
mrwjdhj3

mrwjdhj32#

试试这个:

  1. data=[{'ID': '1234567',
  2. 'Date': '2022-12-21',
  3. 'Total_Transactions': 1,
  4. 'Amount': 235.00,
  5. 'Account_Name__c':'a1234567'},
  6. {'ID': '2345678',
  7. 'Date': '2022-13-21',
  8. 'Total_Transactions': 2,
  9. 'Amount': 300.50,
  10. 'Account_Name__c':'a2345678'}]
  11. df=pd.DataFrame(data)
  12. df["Account_Name__r"]=df["Account_Name__c"].apply(lambda x: {"Account_Name__c":x})
  13. df.drop(columns=["Account_Name__c"],inplace=True)
  14. 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()将其设置为字典来获取该列的值

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

结果是:

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

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

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

结果是:

  1. [{'ID': '1234567',
  2. 'Date': '2022-12-21',
  3. 'Total_Transactions': 1,
  4. 'Amount': 235.00,
  5. 'Account_Name__r': {'Account_Name__c':'a1234567'}}]
展开查看全部

相关问题