在转换为具有拆分方向的 json 之前从数据框中删除索引

Posted

技术标签:

【中文标题】在转换为具有拆分方向的 json 之前从数据框中删除索引【英文标题】:Remove index from dataframe before converting to json with split orientation 【发布时间】:2017-09-22 12:19:42 【问题描述】:

我正在使用以下内容将 pandas 数据帧输出到 json 对象:

df_as_json = df.to_json(orient='split')

在 json 对象中存储了多余的索引。我不想包括这些。

我试过删除它们

df_no_index = df.to_json(orient='records')
df_as_json = df_no_index.to_json(orient='split')

但是我得到了一个

AttributeError: 'str' object has no attribute 'to_json'

有没有一种快速的方法来重组数据框,使其在 .to_json(orient='split') 调用期间或之前不包含单独的索引列?

【问题讨论】:

你试过 orient='records' 这不起作用,因为to_json 不返回pandas 数据帧,因此to_json 的下一次调用不起作用。 @StevenG 是的,这会将列名作为键发送,这会将文件大小增加 30%(我不想这样做)。 【参考方案1】: 导入json模块 使用to_json(orient='split') 转换为json 使用json 模块将该字符串加载到字典中 用del json_dict['index'] 删除index 键 使用json.dumpjson.dumps 将字典转换回json

演示

import json

df = pd.DataFrame([[1, 2], [3, 4]], ['x', 'y'], ['a', 'b'])

json_dict = json.loads(df.to_json(orient='split'))
del json_dict['index']
json.dumps(json_dict)

'"columns": ["a", "b"], "data": [[1, 2], [3, 4]]'

【讨论】:

或者,从字典开始,即:data = df.to_dict(orient='split') 后跟 del data['index']...【参考方案2】:

Since two years back pandas (>= v0.23.0) 提供index 参数(仅对orient='split'orient='table' 有效):

df = pd.DataFrame([[1, 2], [3, 4]], ['x', 'y'], ['a', 'b'])
df.to_json(orient='split', index=True)
# '"columns":["a","b"],"index":["x","y"],"data":[[1,2],[3,4]]'
df.to_json(orient='split', index=False)
# '"columns":["a","b"],"data":[[1,2],[3,4]]'

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_json.html

【讨论】:

好的,很高兴看到 pandas 解决了这个问题

以上是关于在转换为具有拆分方向的 json 之前从数据框中删除索引的主要内容,如果未能解决你的问题,请参考以下文章

快速将 JSON 列转换为 Pandas 数据框

将 JSON 时间戳字符串转换为 pandas 数据框中的 python 日期

如何从具有特定格式的数据框中保存 json?

在 Panda 数据框中转换 json 字符串 [关闭]

使用javascript将json数据集值拆分为数据表

在 PySpark 数据框中拆分和计算列值