Python 使用pandas将json数据解析为csv
我正在尝试使用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
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,通用