将数据框转换为 json

时间:2021-07-29 12:45:45

标签: python pandas dataframe

我想转换以下数据框

| id  | date         | score |
| --- | ------------ | ----- |
| 1   | 2021-01-01   | 1     |
| 1   | 2021-01-02   | 2     |
| 1   | 2021-01-03   | 3     |

转成如下格式的json

[{id: 1}, {date: 2021-01-01, score: 1}, {date: 2021-01-02, score: 2}, {date: 2021-01-03, score: 3}]

我试过使用 to_json(orient='records') 但这会产生:

[{id: 1, date: 2021-01-01, score: 1}, {id: 1, date: 2021-01-02, score: 2}, {id: 1, date: 2021-01-03, score: 3}]

to_json() 之前是否有一些预处理可以帮助获得我的输出,还是我应该手动创建键值对?

注意

不会有多个 id。

2 个答案:

答案 0 :(得分:2)

pandas to_json() 有一个原生的 DataFrame 方法: orient 参数将帮助您处理输出格式。

df.to_json(filepath, orient='records')

应该这样做:

import pandas as pd
df = pd.DataFrame([{'id': 1, 'date': '2021-01-01', 'score': 1}, {'id': 1, 'date': '2021-01-02', 'score': 2}, {'id': 1, 'date': '2021-01-03', 'score': 3}])

import json
json.dumps([{'id': 1}] + df.drop(columns=['id']).to_dict(orient='records'))

如果有多个 ID:

json.dumps([[{'id': int(k)}] + df[df['id'] == k].drop(columns=['id']).to_dict(orient='records') for k in df['id'].unique()])

答案 1 :(得分:0)

似乎您想要按 id 分组的数据,但随后又想要一种奇怪的格式,而 .to_json 不会给您。

您还没有说清楚当有多个索引时您期望发生什么,但我对您想要的最佳猜测是:

import json
import pandas as pd

def transform_group(group):
    index, dataframe = group
    output = dataframe[['date', 'score']].to_dict(orient='records')
    output.insert(0, {"id": index})
    return output

data = pd.DataFrame([
    {"id": 1, "date": "2021-01-01", "score": 1},
    {"id": 1, "date": "2021-01-02", "score": 2}, 
    {"id": 1, "date": "2021-01-03", "score": 3}
])
transformed_data = [transform_group(group) for group in data.groupby(data.id)]
print(json.dumps(transformed_data))