将Pandas DataFrame转换为JSON格式

时间:2016-08-31 19:01:58

标签: json pandas dataframe

我有一个带有两列的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文件。任何帮助将不胜感激。

9 个答案:

答案 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())))