2015-10-22 65 views
0

相对较新的熊猫,我有一个JSON和Python文件:Python的大熊猫JSON二维数组

{"dataset":{ 
    "id": 123, 
    "data": [["2015-10-16",1,2,3,4,5,6], 
      ["2015-10-15",7,8,9,10,11,12], 
      ["2015-10-14",13,14,15,16,17]] 
}} 

&

import pandas 
x = pandas.read_json('sample.json') 
y = x.dataset.data 
print x.dataset 

印刷x.dataset和y工作正常,但是当我去访问一个子元素y,它返回一个'buffer'类型。这是怎么回事?我如何访问数组内的数据?尝试y [0] [1]它返回出界限错误,并且迭代返回一个奇怪的'nul'字符序列,但它似乎能够在打印x.dataset后返回数据的第一部分。 。

回答

2

一个熊猫系列点的data属性包含在该系列中的所有数据的内存缓冲区:

>>> df = pandas.read_json('sample.json') 
>>> type(df.dataset) 
pandas.core.series.Series 
>>> type(df.dataset.data) 
memoryview 

如果你有一个行/列命名为"data",你必须通过它来访问它字符串名称,例如:

>>> type(df.dataset['data']) 
list 

由于这样的惊喜,通过索引访问列而不是通过属性访问通常被认为是最佳实践。如果你这样做,你会得到你想要的结果:

>>> df['dataset']['data'] 
[['2015-10-16', 1, 2, 3, 4, 5, 6], 
['2015-10-15', 7, 8, 9, 10, 11, 12], 
['2015-10-14', 13, 14, 15, 16, 17]] 

>>> arr = df['dataset']['data'] 
>>> arr[0][0] 
'2015-10-16' 
+0

太棒了!非常感谢。具有讽刺意味的是,我刚刚在一个标准的JSON导入上使用索引键,但还没有想到将它应用于熊猫阅读:) – Onitz