Python 使用pandas将json数据解析为csv

Python 使用pandas将json数据解析为csv,python,json,pandas,csv,Python,Json,Pandas,Csv,我正在尝试使用Python中的pandas包将json文件转换为csv文件 正在使用的代码: import pandas json_file = ("/home/joe/Documents/code/facebook/json/message_1.json") output = pandas.read_json(json_file) f = open("/home/joe/Documents/code/facebook/csv/test_output.csv", "w+") f.write(ou

我正在尝试使用Python中的pandas包将json文件转换为csv文件

正在使用的代码:

import pandas
json_file = ("/home/joe/Documents/code/facebook/json/message_1.json")
output = pandas.read_json(json_file)
f = open("/home/joe/Documents/code/facebook/csv/test_output.csv", "w+")
f.write(output.to_csv())
示例json:

{
  "messages": [
    { 
      "sender_name": "Joe P",
      "timestamp_ms": 1576878720049,
      "content": "message 3",
      "type": "Generic"
    },
    { 
      "sender_name": "Joe P",
      "timestamp_ms": 1576878681386,
      "content": "message 2",
      "type": "Generic"
    },
    {
      "sender_name": "Aimee C",
      "timestamp_ms": 1576878665008,
      "content": "message 1",
      "type": "Generic"
    }
  ]
}
我希望输出csv数据的格式如下:

sender_name |timestamp_ms  |content   |type
Joe P       |1576878720049 |Message 3 |generic
Joe P       |1576878681386 |Message 2 |generic
Aimee C     |1576878665008 |Message 1 |generic
但是,输出数据看起来只有2列,而不是4列:

    |messages
0   |{'sender_name': 'Joe P', 'timestamp_ms': 1576878720049, 'content': 'message 3', 'type': 'Generic'}
1   |{'sender_name': 'Joe P', 'timestamp_ms': 1576878681386, 'content': 'message 2', 'type': 'Generic'}
2   |{'sender_name': 'Aimee C', 'timestamp_ms': 1576878665008, 'content': 'message 1', 'type': 'Generic'}
我已经阅读了很多与使用pandas解析JSON数据相关的线程,但我不能完全确定解决方案。

如果您有{key:[v0,v1,…],…}结构,pandas假设key是列的名称,而v0,v1。。。是该列的值,它正是您得到的输出。所以,你不想给它一份清单

相反,您需要一个列表,其中列表中的每个值对应一整行。这正是与messages键对应的值的结构。因此,如果您只是使用messages键对JSON进行索引,您将得到一个列名称映射到值的行字典数组,您可以将其传递给Pandas以创建数据帧

在[87]中:导入熊猫作为pd 在[88]中:导入json 在[89]中:sample_json= ...: { …:信息:[ ...: { …:发件人姓名:乔P, …:时间戳:157687720049, …:内容:信息3, …:类型:泛型 ...: }, ...: { …:发件人姓名:乔P, …:时间戳\u ms:1576878681386, …:内容:信息2, …:类型:泛型 ...: }, ...: { …:发送方名称:Aimee C, …:时间戳:157687665008, …:内容:信息1, …:类型:泛型 ...: } ...: ] ...: } ...: 在[90]中:json_data=json.loadssample_json 在[91]中:df=pd.DataFramejson_data[messages] In[92]:df 出[92]: 内容发送者名称时间戳类型 0消息3乔P 157687720049通用 1消息2乔P 1576878681386通用 2消息1 Aimee C 157687665008通用 如果您的最终目标是将JSON转换为CSV,那么这里甚至不需要熊猫。您可以使用csv.DictWriter直接编写内部dicts。例如:

在[95]中:导入系统 在[96]中:导入csv 在[97]中:writer=csv.DictWritersys.stdout,json_数据[messages][0]。键 在[98]中:writer.writeheader 发件人名称、时间戳、内容、类型 [99]:writer.writerowsjson_数据[消息] Joe P,157687720049,信息3,通用 Joe P,1576878681386,信息2,通用 Aimee C,157687665008,信息1,通用