【问题标题】:pandas dataframe to json with each row encapsulated in a parent element将熊猫数据框转换为 json,每一行都封装在一个父元素中
【发布时间】:2021-03-15 16:32:55
【问题描述】:

我想使用 to_json() 函数来序列化 pandas 数据帧,同时将每一行封装在根“Person”元素中。

import pandas as pd
data = [['tom', 10], ['nick', 15], ['juli', 14]]
df = pd.DataFrame(data, columns = ['Name', 'Age'])
df.to_json(orient='records')
'[{"Name":"tom","Age":10},{"Name":"nick","Age":15},{"Name":"juli","Age":14}]'

我希望 to_json() 输出为:

'[{"Person":{"Name":"tom","Age":10}},{"Person":{"Name":"nick","Age":15}},{"Person":{"Name":"juli","Age":14}}]'

我认为这可以通过 dataframe.apply() 来实现,但无法弄清楚。

谢谢。

【问题讨论】:

    标签: python json python-3.x pandas dataframe


    【解决方案1】:

    我想您想使用Person 作为每个集合的索引或标识符。否则,只包含Person 作为每个嵌套dict 的固定字符串键将是多余的。如果是这种情况,您可以在 orient 参数中使用 index。在这种情况下,它将附加与数据框关联的索引。

    import pandas as pd
    >>> data = [['tom', 10], ['nick', 15], ['juli', 14]]
    >>> df = pd.DataFrame(data, columns = ['Name', 'Age'])
    >>> temp = [df.to_json(orient='index')]
    >>> temp = ['{"0":{"Name":"tom","Age":10},"1":{"Name":"nick","Age":15},"2":{"Name":"juli","Age":14}}']
    

    此外,您可以根据需要调整您的index。我希望这是你想要的。

    【讨论】:

      【解决方案2】:

      使用List Comprehension 使用df.to_dict 创建dicts 的列表:

      In [4370]: d = [{'Person':i} for i in df.to_dict(orient='records')]
      

      使用json.dumps将上面的dict转换为json:

      In [4372]: import json
      
      In [4373]: j = json.dumps(d)
      
      In [4374]: print(j)
      Out[4373]: '[{"Person": {"Name": "tom", "Age": 10}}, {"Person": {"Name": "nick", "Age": 15}}, {"Person": {"Name": "juli", "Age": 14}}]'
      

      【讨论】:

      • @user14757480 答案对你有用吗?
      • @user14757480 如果答案对您有用,请点击我的答案左侧的tick-mark 接受它。
      猜你喜欢
      • 2021-08-21
      • 1970-01-01
      • 2019-04-23
      • 2018-08-25
      • 2023-03-18
      • 2019-01-08
      • 1970-01-01
      • 2021-12-18
      相关资源
      最近更新 更多