【问题标题】:How to loop through json and create a dataframe如何遍历json并创建数据框
【发布时间】:2021-05-12 14:31:19
【问题描述】:

我有一个如下所示的 JSON 文件,我怎样才能用它制作一个数据框。我想将主键设为索引,将子键设为列。

{
  "PACK": {
    "labor": "Recycle",
    "actual": 0,
    "Planned": 2,
    "max": 6
  },
  "SORT": {
    "labor": "Mix",
    "actual": 10,
    "Planned": 4,
    "max": 3
  }
}

预期的输出类似于,我尝试使用 df.T 但不起作用。对此的任何帮助表示赞赏。

        actual  planned
PACK      0       2
SORT      10      4
          

【问题讨论】:

  • 请显示当前代码
  • 我做了 df1 = pd.json_normalize(df) 并且它给了我 1 行子键作为列

标签: json pandas


【解决方案1】:

您可以将您的 json 文件读取到 dict.然后创建数据框,将字典值作为数据,字典键作为索引。

import json
import pandas as pd


with open('test.json') as f:
    data = json.load(f)

df = pd.DataFrame(data.values(), index=data.keys())
print(df)

        labor  actual  Planned  max
PACK  Recycle       0        2    6
SORT      Mix      10        4    3

选择列

df = df[['actual', 'planned']]

【讨论】:

  • 使用json.load(f) 比使用json.loads(f.read()) 快得多,因为它不需要为文件内容创建中间字符串
  • @AndrewMascillaro 谢谢你的建议。顺便说一句,您的方法确实是一个好方法。不知道已经有内置函数了。
  • 如果您有很多列要删除,您可以删除除特定列表中的列之外的所有列。见stackoverflow.com/questions/45846189/…
  • @Oxford_orange 谢谢你的建议。但我认为选择目标列并删除不需要的列具有相同的效果。
  • 是的,仅将列保留在列表中的替代方法对于复杂多变的数据集很有帮助。
【解决方案2】:

Pandas 可以读取多种格式的 JSON 文件。对于您的用例,以下选项应该按照您想要的方式读取您的数据:

pd.read_json(json_file, orient="index")

有关 orient 选项的更多信息,请访问official documentation

【讨论】:

    猜你喜欢
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多