我需要将一个 JSON 文件导入到带有嵌套列表的数据帧中,在转换为数据帧之前,它是一个嵌套字典的列表。文件本身是嵌套的。
示例 JSON:
{
"State": [
{
"ts": "2018-04-11T21:37:05.401Z",
"sensor": [
"accBodyX_ftPerSec2"
],
"value": null
},
{
"ts": "2018-04-11T21:37:05.901Z",
"sensor": [
"accBodyX_ftPerSec2"
],
"value": [
-3.38919
]
},
{
"ts": "2018-04-11T21:37:05.901Z",
"sensor": [
"accBodyY_ftPerSec2"
],
"value": [
-2.004781
]
},
{
"ts": "2018-04-11T21:37:05.901Z",
"sensor": [
"accBodyZ_ftPerSec2"
],
"value": [
-34.77694
]
}
]
}
数据框如下所示:
sensor ts value
0 [accBodyX_ftPerSec2] 2018-04-11T21:37:05.901Z [-3.38919]
1 [accBodyY_ftPerSec2] 2018-04-11T21:37:05.901Z [-2.004781]
2 [accBodyZ_ftPerSec2] 2018-04-11T21:37:05.901Z [-34.77694]
最终,我想删除嵌套或找到一种方法来使用它。目标是将给定传感器名称的值列表以及随附的时间戳提取到另一个数据帧中以进行处理/绘图,如下所示:
ts value
0 2018-04-11T21:37:05.901Z -3.38919
1 2018-04-11T21:37:06.401Z -3.00241
2 2018-04-11T21:37:06.901Z -3.87694
为了删除嵌套,我已经这样做了,但它在仅 100,000 行时速度很慢,但幸运的是比 for 循环快得多。(感谢这篇文章python pandas operations on columns)
def func(row):
row.sensor = row.sensor[0]
if type(row.value) is list:
row.value = row.value[0]
return row
df.apply(func, axis=1)
对于使用嵌套,我能够提取单个值。例如这个:
print( df.iloc[:,2].iloc[1][0] )
-2.004781
但是,尝试从每行中每个列表的索引 0 返回值列表会导致仅返回第一个值:
print( df.iloc[:,2].iloc[:][0] )
-3.38919
当然,我可以用 for 循环来做到这一点,但我知道有一种方法可以用我还无法发现的 Pandas 函数来做到这一点。