【问题标题】:Error message reading JSON file python - list indices must be integers, not str读取 JSON 文件 python 的错误消息 - 列表索引必须是整数,而不是 str
【发布时间】:2015-06-09 14:51:20
【问题描述】:

我正在尝试加载 JSON 文件。下面是代码和文件结构:

df = pd.DataFrame(None, columns=columns)
for i,line in enumerate(open(json_dimName.json')):

    j = json.loads(line)

print j

Output: {u'dimensionalFacts': [{u'dimensions': [{u'dimName': u'us-gaap_BusinessAcquisitionAxis'}]}], u'stockSymbol': u'pfe', u'_id': {u'$oid': u'55400c1ae44f9e094c5833b2'}}

然后我尝试将其读入熊猫数据框: df.loc[i] = [j['dimensionalFacts']['dimensions'], j['stockSymbol']]

这是我收到的错误消息: list indices must be integers, not str

我是 python 和编程的新手,所以非常感谢任何帮助。非常感谢!

【问题讨论】:

    标签: python json pandas


    【解决方案1】:

    这是因为你的每个 j 值都有一个键列表:

    {u'dimensionalFacts': [{u'dimensions': [{u'dimName': u'us-gaap_BusinessAcquisitionAxis'}]}]
    

    在这种情况下你想要的是:

    df.loc[i] = [j['dimensionalFacts'][0]['dimensions'], j['stockSymbol']]
    

    这将从每个 j 值中获取结果字典,因为每个条目似乎只有一个字典。

    它给出的错误正是问题所在:您试图告诉程序在列表中寻找位置“维度”,而不是整数位置。

    【讨论】:

    • 非常感谢!这真的很有帮助!
    • 当然。如果您喜欢这个答案并认为它是最好的(这里还有其他很好的答案),请选择它作为答案。
    【解决方案2】:

    j['dimensionalFacts'] 是一个列表;这就是方括号的意思。如果要访问其中的字典,则需要使用数字对其进行索引。

    j['dimensionalFacts'][0]['dimensions']
    

    请注意,这适用于给出的示例,但更复杂的结构可能需要您遍历列表而不是假设第一个元素。

    【讨论】:

      【解决方案3】:

      显然j['dimensionalFacts'] 是一个列表,所以我猜你想要做的是:

      df.loc[i] = j['dimensionalFacts'][0]['dimensions'], j['dimentionalFacts'][0]['stockSymbol']
      

      【讨论】:

        猜你喜欢
        • 2015-05-03
        • 1970-01-01
        • 1970-01-01
        • 2014-09-02
        • 1970-01-01
        • 2018-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多