首页 > 解决方案 > pd.read_json() 返回 1 列的数据帧

问题描述

目前,我正在尝试将 json 文件从 webscrape 加载到 python 中,以便搜索重新排序某些列,删除一些文本,例如 (\n) 等。我在 json 文件中遇到了一些问题, pd.read_json() 有效(有点)。它返回一个数据框,其中 1 列标题为“默认”。我当前的代码在下面并且运行没有错误。

我尝试了原生 JSON 解释器,但由于一些程式化的字符,我收到了错误。

def main():
    file_path = filedialog.askopenfilename()
    df = pd.read_json(file_path)
    print(df)

Json 文件有效且格式如下:

{
    "Default": [{
        "ItemID": "11111",
        "Title": "A super captivating title",
        "Date": "July 22, 2019",
        "URL": "www.someurl.com",
        "BodyText": "some text."
    }, {
        "ItemID": "22222",
        "Title": "Even more captivating title",
        "Date": "July 12, 2019",
        "URL": "www.differenturl.com",
        "BodyText": "different text"
    }]
}

现在我明白了“默认”被解释为 JSON 对象以及为什么将它用作列。我尝试了 read_json() 的几种不同方向,但收到或多或少相同的结果。

我希望将 ItemID、Title、Date、URL 和 BodyText 作为列,并将它们的值适当地指定为行。感谢您提供任何帮助,我找不到类似的问题,但如果之前已经回答,请指出正确的方向。

标签: pythonjsonpandaspython-3.7

解决方案


没有read_json东方可以做到这一点。您需要将"Default"内容传递给DataFrame构造函数:

import json
import pandas as pd

with open('temp.txt') as fh:
    df = pd.DataFrame(json.load(fh)['Default'])

推荐阅读