读取JSON文件python的错误消息 - 列表索引必须是整数,而不是str

时间:2015-06-09 14:51:20

标签: python json pandas

我正在尝试加载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'}}

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

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

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

3 个答案:

答案 0 :(得分:1)

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

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

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

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

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

它给出的错误恰恰是问题:你试图告诉程序在列表中寻找位置“尺寸”而不是整数位置。

答案 1 :(得分:0)

j['dimensionalFacts']是一个列表;这就是方括号的含义。如果你想进入其中的字典,你需要使用数字对其进行索引。

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

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

答案 2 :(得分:0)

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

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