【问题标题】:Pandas to JSON output in an object specific熊猫到特定对象中的 JSON 输出
【发布时间】:2016-02-20 02:44:07
【问题描述】:

我需要任何人的帮助来格式化 json 文件的输出。谢谢 预期输出

{
    "2001-02-17": [
        {"ArCiCo": "Paris_France", "AuthorID": "CCC", "DptCiCo": "Tokyo_Japan"}
    ], 
    "2001-03-03": [
        {"ArCiCo": "London_UK", "AuthorID": "EEE", "DptCiCo": "Berlin_Germany"}
    ], 
    "2001-03-10": [
        {"ArCiCo": "Lagos_Nigeria", "AuthorID": "BBB", "DptCiCo": "London_UK"}, 
        {"ArCiCo": "Tokyo_Japan", "AuthorID": "CCC", "DptCiCo": "NewYork_US"}, 
        {"ArCiCo": "Nairobi_Kenya", "AuthorID": "DDD", "DptCiCo": "NewYork_US"}
    ], 
    "2001-03-12": [
        {"ArCiCo": "Paris_France", "AuthorID": "AAA", "DptCiCo": "NewYork_US"}
    ], 
    "2001-04-08": [
        {"ArCiCo": "Paris_France", "AuthorID": "EEE", "DptCiCo": "London_UK"}
    ], 
    "2001-04-10": [
        {"ArCiCo": "NewYork_US", "AuthorID": "AAA", "DptCiCo": "Tokyo_Japan"}
    ]
}

目前这是输出,我在 { 和之后有 double-quote (" ") 并且我在 中有每个值单引号 (' ')。我希望输出看起来像预期的输出。

{
    "2001-02-17": [
        **"**{'ArCiCo': 'Paris_France', 'AuthorID': 'CCC', 'DptCiCo': 'Tokyo_Japan'}**"**
    ], 
    "2001-03-03": [
        "{'ArCiCo': 'London_UK', 'AuthorID': 'EEE', 'DptCiCo': 'Berlin_Germany'}"
    ], 
    "2001-03-10": [
        "{'ArCiCo': 'Lagos_Nigeria', 'AuthorID': 'BBB', 'DptCiCo': 'London_UK'}", 
        "{'ArCiCo': 'Tokyo_Japan', 'AuthorID': 'CCC', 'DptCiCo': 'NewYork_US'}", 
        "{'ArCiCo': 'Nairobi_Kenya', 'AuthorID': 'DDD', 'DptCiCo': 'NewYork_US'}"
    ], 
    "2001-03-12": [
        "{'ArCiCo': 'Paris_France', 'AuthorID': 'AAA', 'DptCiCo': 'NewYork_US'}"
    ], 
    "2001-04-08": [
        "{'ArCiCo': 'Paris_France', 'AuthorID': 'EEE', 'DptCiCo': 'London_UK'}"
    ], 
    "2001-04-10": [
        "{'ArCiCo': 'NewYork_US', 'AuthorID': 'AAA', 'DptCiCo': 'Tokyo_Japan'}"
    ]
}

这是产生输出的示例代码

json_dict[date_range]= [str(v) for v in dup_date.to_dict(orient='records')]

【问题讨论】:

  • 你试过to_json()吗?

标签: python json dictionary pandas


【解决方案1】:

有双引号是因为您将内部dict 转换为带有str(v) 的字符串。我不确定你的数据框是什么样的,但你可以试试json_dict[date_range] = dup_date.to_dict(orient='records')

如果我猜对了你的数据框:

print df
                   ArCiCo AuthorID         DptCiCo
2001-02-17   Paris_France      CCC     Tokyo_Japan
2001-03-03      London_UK      EEE  Berlin_Germany
2001-03-10  Lagos_Nigeria      BBB       London_UK
2001-03-10    Tokyo_Japan      CCC      NewYork_US
2001-03-10  Nairobi_Kenya      DDD      NewYork_US
2001-03-12   Paris_France      AAA      NewYork_US
2001-04-08   Paris_France      EEE       London_UK
2001-04-10     NewYork_US      AAA     Tokyo_Japan

那么你可以做以下事情

dct = {dt : subdf.to_dict(orient='records') for dt, subdf in df.groupby(level=0)}

from pprint import pprint  #For printing
pprint(dct, width=100)

{'2001-02-17': [{'ArCiCo': 'Paris_France', 'AuthorID': 'CCC', 'DptCiCo': 'Tokyo_Japan'}],
 '2001-03-03': [{'ArCiCo': 'London_UK', 'AuthorID': 'EEE', 'DptCiCo': 'Berlin_Germany'}],
 '2001-03-10': [{'ArCiCo': 'Lagos_Nigeria', 'AuthorID': 'BBB', 'DptCiCo': 'London_UK'},
                {'ArCiCo': 'Tokyo_Japan', 'AuthorID': 'CCC', 'DptCiCo': 'NewYork_US'},
                {'ArCiCo': 'Nairobi_Kenya', 'AuthorID': 'DDD', 'DptCiCo': 'NewYork_US'}],
 '2001-03-12': [{'ArCiCo': 'Paris_France', 'AuthorID': 'AAA', 'DptCiCo': 'NewYork_US'}],
 '2001-04-08': [{'ArCiCo': 'Paris_France', 'AuthorID': 'EEE', 'DptCiCo': 'London_UK'}],
 '2001-04-10': [{'ArCiCo': 'NewYork_US', 'AuthorID': 'AAA', 'DptCiCo': 'Tokyo_Japan'}]}

如果您希望所有内容都为字符串,并且引号为双引号 ("),则可以使用 json.dumps

print json.dumps(dct, indent=4, sort_keys=True)

{
    "2001-02-17": [
        {
            "ArCiCo": "Paris_France", 
            "AuthorID": "CCC", 
            "DptCiCo": "Tokyo_Japan"
        }
    ], 
    "2001-03-03": [
        {
            "ArCiCo": "London_UK", 
            "AuthorID": "EEE", 
            "DptCiCo": "Berlin_Germany"
        }
    ], 
    "2001-03-10": [
        {
            "ArCiCo": "Lagos_Nigeria", 
            "AuthorID": "BBB", 
            "DptCiCo": "London_UK"
        }, 
        {
            "ArCiCo": "Tokyo_Japan", 
            "AuthorID": "CCC", 
            "DptCiCo": "NewYork_US"
        }, 
        {
            "ArCiCo": "Nairobi_Kenya", 
            "AuthorID": "DDD", 
            "DptCiCo": "NewYork_US"
        }
    ], 
    "2001-03-12": [
        {
            "ArCiCo": "Paris_France", 
            "AuthorID": "AAA", 
            "DptCiCo": "NewYork_US"
        }
    ], 
    "2001-04-08": [
        {
            "ArCiCo": "Paris_France", 
            "AuthorID": "EEE", 
            "DptCiCo": "London_UK"
        }
    ], 
    "2001-04-10": [
        {
            "ArCiCo": "NewYork_US", 
            "AuthorID": "AAA", 
            "DptCiCo": "Tokyo_Japan"
        }
    ]
}

【讨论】:

  • 谢谢,我的输出实际上是我想要的,我只想删除 {} 周围的 (" ") 和单引号 (' ')。然后通过更改值周围的单引号 (' ') 并用双引号 (" ") 替换它来产生相同的输出
猜你喜欢
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 2018-03-03
  • 2016-07-03
  • 2020-11-26
相关资源
最近更新 更多