我正在尝试加载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和编程的新手,所以非常感谢任何帮助。非常感谢!
答案 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']