imports json    
df = pd.read_json("C:/xampp/htdocs/PHP code/APItest.json", orient='records')
print(df)

DataFrame

我想额外创建三列:['name','logo','ico_score']而不是'main'

我试过:

df2 = df.join(pd.DataFrame(list(json.loads(d).values())[0] for d in df.pop('main')) )

但是得到这个类型错误:

the JSON object must be str, bytes or bytearray, not dict

我希望有人能帮我找到一种方法,这样我就可以得到一个用于统计的数据表.

这就是我的json数据的样子:

[
    {
        "id": "126",
        "main": {"name": "SONM", "logo": "link", "ico_score": "6.7"},
        "links": {"url": "link"},
        "finance": {"raised": "42000000"},
    },
    {
        "id": "132",
        "main": {"name": "openANX", "logo": "link", "ico_score": "5.7"},
        "links": {"url": "link"},
        "finance": {"raised": "18756937"},
    },
    {
        "id": "166",
        "main": {"name": "Boul\\u00e9", "logo": "link", "ico_score": "5.6"},
        "links": {"url": "link"},
        "finance": {"raised": ""},
    },
]  

推荐答案

IIUC你可以这样做:

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

df = pd.json_normalize(data)
df.columns = ['id', 'name', 'logo', 'ico_score', 'url', 'raised']
print(df)

    id        name  logo ico_score   url    raised
0  126        SONM  link       6.7  link  42000000
1  132     openANX  link       5.7  link  18756937
2  166  Boul\u00e9  link       5.6  link 

Python相关问答推荐

通过优化空间在Python中的饼图中添加标签

将DF中的名称与另一DF拆分并匹配并返回匹配的公司

点到面的Y距离

Odoo 14 hr. emergency.public内的二进制字段

将整组数组拆分为最小值与最大值之和的子数组

重新匹配{ }中包含的文本,其中文本可能包含{{var}

_repr_html_实现自定义__getattr_时未显示

如何让Flask 中的请求标签发挥作用

Django REST Framework:无法正确地将值注释到多对多模型,不断得到错误字段名称字段对模型无效'<><>

多处理队列在与Forking http.server一起使用时随机跳过项目

Plotly Dash Creating Interactive Graph下拉列表

如何使用使用来自其他列的值的公式更新一个rabrame列?

在Python中使用yaml渲染(多行字符串)

人口全部乱序 - Python—Matplotlib—映射

替换现有列名中的字符,而不创建新列

循环浏览每个客户记录,以获取他们来自的第一个/最后一个渠道

使用tqdm的进度条

为什么dict. items()可以快速查找?

按列表分组到新列中

Django-修改后的管理表单返回对象而不是文本