python - 将python中的数据帧转换为以下格式的json
问题描述
我正在寻找一个 Python 代码实现来将 Pandas Dataframe 转换为下面提到json
的格式的文件。
输入 Python Dataframe 看起来像这样 ( input_data - dataframe name
)
stateacttraf |stateno | statename | actno | actname | traffic | reward | id | message
stateacttraf | 1 | S1 | 1 | A1 | 22 | 3 | 234569 | stateactsplit
stateacttraf | 1 | S1 | 2 | A2 | 30 | 4 | 234569 | stateactsplit
stateacttraf | 1 | S1 | 3 | A3 | 48 | 2.3 | 234569 | stateactsplit
stateacttraf | 2 | S2 | 1 | A1 | 13 | 4.1 | 234569 | stateactsplit
stateacttraf | 2 | S2 | 2 | A2 | 27 | 8.2 | 234569 | stateactsplit
stateacttraf | 2 | S2 | 3 | A3 | 60 | 5.6 | 234569 | stateactsplit
Dataframe 应该类似于以下 json 格式的示例,需要在kafka中发布:
示例预期的 json 输出:
{
"stateacttraf": "1, S1, 1 , A1 , 24.5,3 \n
1, S1, 2 , A2 , 25.5,4 \n
1, S1, 3 , A3 , 20,2.3 \n
2, S2, 1 , A1 , 10,4.1 \n
2, S2, 2 , A2 , 10,8.2 \n
2, S2, 2 , A2 , 10,5.6 \n",
"message": "stateactsplit",
"id": 234569
}
在示例输出\n
中,仅表示这些中的每一行(1, S1, 2 , A2 , 25.5,4)
都应打印在新行中。
尝试使用input_data.to_json(orient='index', lines=True)
,但每行中的每个值都会重复列名。
解决方案
这不是一个好的 JSON 格式,但是我编写了适合您的代码:
raw_data = {'stateacttraf': ['stateacttraf','stateacttraf','stateacttraf','stateacttraf', 'stateacttraf2','stateacttraf2' ],
'stateno': [1, 1, 1, 2, 3, 4],
'statename': ['S1', 'S1', 'S1', 'S2','S3', 'S4'],
'id': [234569, 234569, 234569, 234569, 99, 99],
'message': ['stateactsplit','stateactsplit', 'stateactsplit','stateactsplit','stateacttraf2', 'stateacttraf2']}
df = pd.DataFrame(raw_data).set_index(['stateacttraf'])
stateno statename id message
stateacttraf
stateacttraf 1 S1 234569 stateactsplit
stateacttraf 1 S1 234569 stateactsplit
stateacttraf 1 S1 234569 stateactsplit
stateacttraf 2 S2 234569 stateactsplit
stateacttraf2 3 S3 99 stateacttraf2
stateacttraf2 4 S4 99 stateacttraf2
试试这个代码:
index_name = ['stateacttraf', 'message', 'id']
s = df.groupby(index_name).apply(lambda row: '\n '.join(map(lambda x: str(x.tolist())[1:-1], row.values)))
formatted_data = [{index_name[0]:s[i0].values[0], index_name[1]:i1, index_name[2]:i2} for i0, i1, i2 in s.index]
这是您的(坏)JSON格式的数据:
[{'stateacttraf': "1, 'S1', 234569, 'stateactsplit'\n 1, 'S1', 234569, 'stateactsplit'\n 1, 'S1', 234569, 'stateactsplit'\n 2, 'S2', 234569, 'stateactsplit'",
'message': 'stateactsplit',
'id': 234569},
{'stateacttraf': "3, 'S3', 99, 'stateacttraf2'\n 4, 'S4', 99, 'stateacttraf2'",
'message': 'stateacttraf2',
'id': 99}]
TIP : 如果你不想发疯,我建议你切换到标准的 json 格式
推荐阅读
- node.js - 如何执行两个承诺但在第一个完成后返回响应
- powershell - 如何将用于将选定文件的路径复制到剪贴板的命令添加到文件资源管理器的上下文菜单
- r - RShiny - 去年同期
- java - 如何将 log4j 输出消息分配给变量
- android - 如何检测软键盘是否在 Android 的 adjustPan 配置(仅限)中被关闭?
- html - 带有 UTF8 补充字符的 HTML 输入的最大长度
- python - 如何使用 Pycharm 安装 tkinter?
- firebase - 如何在 ionic 中从 Firebase 函数向客户端获取响应
- react-native - 在 react-native 中,为什么我无法定义组件的宽度?
- r - r-markdown 和 kableExtra pdf 输出的错误