我正在导入一个JSON文件,其模式如下:
{
"000001": {
"USA": {
"requests": 1234,
"RTT": 40
},
"Japan": {
"requests": 10,
"RTT": 200
}
},
"000002": {
"USA": {
"requests": 4321,
"RTT": 50
},
"Japan": {
"requests": 10,
"RTT": 150
}
}
}
导入后,我有两件事要处理这些数据:
在将其转储到数据库时,我希望出现如下模式:
+--------+---------+----------+-------+
| time* | country*| requests | RTT |
+--------+---------+----------+-------+
| 000001 | USA | 1234 | 40ms |
| 000001 | Japan | 10 | 200ms |
| 000002 | USA | 4321 | 50ms |
| 000002 | Japan | 20 | 150ms |
| ... | ... | ... | ... |
当前要导入数据,我将执行以下操作:
>>>import numpy as np
>>>import flatdict as fd
>>>np.array(fd.FlatDict(json_string))
array([[000001, u'USA', u'requests', 1234],
[000001, u'USA', u'RTT', 40],
[000001, u'Japan', u'requests', 10],
...,
[000002, u'USA', u'RTT', 50],
[000002, u'Japan', u'requests', 20],
[000002, u'Japan', u'RTT', 150]],
dtype='<U31')
这里的问题是,这会为每个值而不是每个键创建一个唯一的行。如果有必要,我愿意编写自己的函数来替换flatdict
,但问题是:NumPy是否可以使用tuples/arararys/objects作为值?理想情况下,我希望输出如下:
>>>np.array(data)
array([[000001, u'USA', (1234, 40)],
[000001, u'Japan', (10, 200)],
[000002, u'USA', (4321, 50)],
[000002, u'Japan', (20, 150)]],
dtype='...')
但我愿意接受:
>>>np.array(data)
array([[000001, u'USA', 1234, 40],
[000001, u'Japan', 10, 200],
[000002, u'USA', 4321, 50],
[000002, u'Japan', 20, 150]],
dtype='...')
对于第一步(执行所有分析),我可以使用我现在拥有的NumPy数组。类似于array[:,"USA","requests"]
的内容返回美国所有时间的请求数。你知道吗
对于第二步,我需要把它转换成不同的格式。如果有办法的话:
array([[000001, u'USA', u'requests', 1234],
[000001, u'USA', u'RTT', 40],
[000001, u'Japan', u'requests', 10],
...,
[000002, u'USA', u'RTT', 50],
[000002, u'Japan', u'requests', 20],
[000002, u'Japan', u'RTT', 150]],
dtype='<U31')
把它变成:
[[000001, u'USA', 1234, 40],
[000001, u'Japan', 10, 200],
[000002, u'USA', 4321, 50],
[000002, u'Japan', 20, 150]]
为了将其转储到数据库中,也可以
您在压平词典时遇到问题;对
flatdict
了解不多,但是如果您有一个三级词典,您可以使用列表理解来压平它:对于非齐次数据,如果需要在内存中进行分析
pandas
通常比numpy
更易于使用,可以将其转换为如下数据帧:相关问题 更多 >
编程相关推荐