我想转换以下数据框
| 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。
答案 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))