发生类型错误:列表索引必须为整数

时间:2019-03-21 05:05:20

标签: python pandas python-requests

我正在尝试加载json文件并遍历字典以获取我选择的键值,之后,我将使用pandas数据框将这些值保存在excel表中。但是当我运行加载文档时,出现错误

TypeError: list indices must be integers or slices, not str

下面是我要实现的全部代码,

import json
import pandas as pd
import requests

URLs = ['http://httpbin.org/ip',
'http://httpbin.org/user-agent',
'http://httpbin.org/headers']

json_list = []
for url in URLs:
    data = requests.get(url)
    resolvedwo = data.json()
    json_list.append(resolvedwo)

    with open('resolvedworesolution.json', 'w+') as f:
        json.dump(json_list, f, sort_keys=True, indent = 4)
with open('C:\\Users\\resolvedworesolution.json', encoding='utf-8') as f:
    data = json.load(f)
columns = ['Title', 'Status']
df_ = pd.DataFrame(columns=columns)
for ib in data['documents']:
    tit = ib['title']
    stat = ib['status']
print(tit, stat)
df_ = df_.append(pd.Series([tit, stat], index=df_.columns), ignore_index=True)
df_.to_excel('C:\\Users\\resolved_wo_resolution.xls', index=False)

注意:上面提到的URL仅作为示例。我使用的URL是内部的,因此无法在此处共享。因此,URL将返回如下所示的JSON数据。

已编辑json:

[
    {
        "documents": [
            {
                "title": [Sample Title 1],
                "status": [true]
            },
            {
                "title": [Sample  Title 2],
                "status": [false]
            }
        ]
    }
]
    [
    {
        "documents": [
            {
                "title": [Sample Title 1],
                "status": [true]
            },
            {
                "title": [Sample  Title 2],
                "status": [false]
            }
        ]
    }
]
    [
    {
        "documents": [
            {
                "title": [Sample Title 1],
                "status": [true]
            },
            {
                "title": [Sample  Title 2],
                "status": [false]
            }
        ]
    }
]

1 个答案:

答案 0 :(得分:1)

问题的出处在这里

for ib in data['documents']:

您的数据是一个列表。因此,您不能使用字符串作为索引。

您有一些选择。如果您知道列表始终是一个条目(它将中断为0个条目),或者您只关心第一个条目

for ib in data[0]['documents']:
    # etc...

如果要处理所有条目,请使用循环

for d in data:
    for ib in d['documents']:
        # etc...

遇到此类错误时,请发布完整的追溯错误。如果没有这些信息,我们需要自己运行代码,这将花费更长的时间。

例如

Traceback (most recent call last):
  File "pdcrash4.py", line 21, in <module>
    for ib in data['documents']:
TypeError: list indices must be integers or slices, not str