我有一个带有两列的Pandas DataFrame
- 一列带有文件名,另一列带有生成小时的列:
File Hour
F1 1
F1 2
F2 1
F3 1
我正在尝试将其转换为具有以下格式的JSON文件:
{"File":"F1","Hour":"1"}
{"File":"F1","Hour":"2"}
{"File":"F2","Hour":"1"}
{"File":"F3","Hour":"1"}
当我使用命令DataFrame.to_json(orient = "records")
时,我会得到以下格式的记录:
[{"File":"F1","Hour":"1"},
{"File":"F1","Hour":"2"},
{"File":"F2","Hour":"1"},
{"File":"F3","Hour":"1"}]
我只是想知道是否有一个选项可以获得所需格式的JSON文件。任何帮助将不胜感激。
答案 0 :(得分:27)
DF.to_json
后获得的输出为string
。因此,您可以根据需要简单地对其进行切片,并从中删除逗号。
out = df.to_json(orient='records')[1:-1].replace('},{', '} {')
要将输出写入文本文件,您可以执行以下操作:
with open('file_name.txt', 'w') as f:
f.write(out)
答案 1 :(得分:12)
我认为OP正在寻找的是:
with open('temp.json', 'w') as f:
f.write(df.to_json(orient='records', lines=True))
这应该可以解决问题。
答案 2 :(得分:9)
在较新版本的熊猫(0.20.0+,我相信)中,这可以直接完成:
df.to_json('temp.json', orient='records', lines=True)
也可以直接压缩:
df.to_json('temp.json.gz', orient='records', lines=True, compression='gzip')
答案 3 :(得分:1)
要转换真实json(不是字符串)中的dataFrame,我使用:
from io import StringIO
import json
import DataFrame
buff=StringIO()
#df is your DataFrame
df.to_json(path_or_buf=buff,orient='records')
dfJson=json.loads(buff)
答案 4 :(得分:1)
将数据帧转换为字典列表
list_dict = []
for index, row in list(df.iterrows()):
list_dict.append(dict(row))
保存文件
with open("output.json", mode) as f:
f.write("\n".join(str(item) for item in list_dict))
答案 5 :(得分:0)
而不是使用dataframe.to_json(orient = “records”)
使用dataframe.to_json(orient = “index”)
我上面的代码将数据帧转换为dict的json格式,如{index - > {column - >值}}
答案 6 :(得分:0)
这是一个小型实用程序类,可将JSON转换为DataFrame并返回:希望对您有用。
# -*- coding: utf-8 -*-
from pandas.io.json import json_normalize
class DFConverter:
#Converts the input JSON to a DataFrame
def convertToDF(self,dfJSON):
return(json_normalize(dfJSON))
#Converts the input DataFrame to JSON
def convertToJSON(self, df):
resultJSON = df.to_json(orient='records')
return(resultJSON)
答案 7 :(得分:0)
尝试这个:
json.dumps(json.loads(df.to_json(orient =“ records”)))
答案 8 :(得分:0)
使用此公式将 Pandas DataFrame 转换为字典列表:
import json
json_list = json.loads(json.dumps(list(DataFrame.T.to_dict().values())))