用空格对来自Pandas中数据框的JSON文件进行排序

时间:2019-03-08 08:18:54

标签: python json pandas dataframe

我正在通过以下代码行将数据帧导出到JSON文件:

with open('example.json', 'w') as f:
for row in df3.iterrows():
    row[1].to_json(f, orient=None, lines=False)
    f.write("\n") 

它返回一个像这样的文件:

{"age":20,"city":"Burdinne","email":"enim@risus.org","name":"Zorita","phone":4565434645.0,"postal_code":42680.0,"regDate":"2015-06-14T12:12:00-07:00"}
{"age":22,"city":"Bharatpur","email":"purus.mauris.a@odiosagittis.ca","name":"Mariam","phone":null,"postal_code":null,"regDate":"2016-10-14T18:52:48-07:00"}
{"age":28,"city":"Neerheylissem","email":"Nam@enimEtiam.org","name":"Malik","phone":null,"postal_code":null,"regDate":"2016-09-20T18:06:55-07:00"}
{"age":24,"city":"San Fratello","email":"sapien@Nullamlobortis.ca","name":"Claire","phone":null,"postal_code":null,"regDate":"2016-12-29T09:49:13-08:00"}
{"age":30,"city":"La Cruz","email":"tempor@purusmaurisa.edu","name":"Hilel","phone":null,"postal_code":null,"regDate":"2016-07-09T12:03:31-07:00"}

但是,我希望将这样的JSON文件制成表格:

[
  {
    "name": "Zorita",
    "email": "enim@risus.org",
    "regDate": "2015-06-14T12:12:00-07:00",
    "city": "Burdinne",
    "age": 20,
    "postal_code":42680,
    "phone": 4565434645
  },
  {
    "name": "Mariam",
    "email": "purus.mauris.a@odiosagittis.ca",
    "regDate": "2016-10-14T18:52:48-07:00",
    "city": "Bharatpur",
    "age": 22
  },
  {
    "name": "Malik",
    "email": "Nam@enimEtiam.org",
    "regDate": "2016-09-20T18:06:55-07:00",
    "city": "Neerheylissem",
    "age": 28
  },
  {
    "name": "Claire",
    "email": "sapien@Nullamlobortis.ca",
    "regDate": "2016-12-29T09:49:13-08:00",
    "city": "San Fratello",
    "age": 24
  },
  {
    "name": "Hilel",
    "email": "tempor@purusmaurisa.edu",
    "regDate": "2016-07-09T12:03:31-07:00",
    "city": "La Cruz",
    "age": 30
  }
]

我该怎么做? 在我的代码中,我尝试使用“ \\ n” 换行,但显然我没有正确执行

3 个答案:

答案 0 :(得分:1)

尝试以下代码:

final_list = list()
for row in df3.iterrows():
    final_list.append(row[1].to_dict(orient=None))

with open('example.json', 'w') as f:
    f.write(json.dumps(final_list, indent=4))

答案 1 :(得分:1)

您可以通过json.dump使用参数indent和必要的sort_keys=True将列转换为列表并写入文件,以获取漂亮的json:

import json

with open("example.json", "w") as f:
    json.dump(df[1].tolist(), f, indent=4, sort_keys=True)

示例

d = [
  {
    "name": "Zorita",
    "email": "enim@risus.org",
    "regDate": "2015-06-14T12:12:00-07:00",
    "city": "Burdinne",
    "age": 20,
    "postal_code":42680,
    "phone": 4565434645
  },
  {
    "name": "Mariam",
    "email": "purus.mauris.a@odiosagittis.ca",
    "regDate": "2016-10-14T18:52:48-07:00",
    "city": "Bharatpur",
    "age": 22
  }

]

df = pd.DataFrame({1: d})
#print (df)

import json

with open("example.json", "w") as f:
    json.dump(df[1].tolist(), f, indent=4, sort_keys=True)

[
    {
        "age": 20,
        "city": "Burdinne",
        "email": "enim@risus.org",
        "name": "Zorita",
        "phone": 4565434645,
        "postal_code": 42680,
        "regDate": "2015-06-14T12:12:00-07:00"
    },
    {
        "age": 22,
        "city": "Bharatpur",
        "email": "purus.mauris.a@odiosagittis.ca",
        "name": "Mariam",
        "regDate": "2016-10-14T18:52:48-07:00"
    }
]

答案 2 :(得分:0)

尽管@skaul05已回答了该问题,但使用iterrows可能效率不高。 这样可能更好

with open('file.json', 'w') as f:
    f.write(json.dumps(json.loads(df.to_json()), indent=4))