将Json加载到Pandas数据帧中

时间:2016-02-25 10:51:43

标签: python json pandas

我有一个有效的json文件,其中包含以下格式,我正在尝试将其加载到pandas中。

{
    "testvalues": [
        [1424754000000, 0.7413],
        [1424840400000, 0.7375],
        [1424926800000, 0.7344],
        [1425013200000, 0.7375],
        [1425272400000, 0.7422],
        [1425358800000, 0.7427]
    ]
}

有一个叫做read_json()的Pandas函数,它接收json文件/缓冲区并吐出数据帧,但是我无法正确加载它,这是显示两列而不是一列有元素看起来像[1424754000000,0.7413]。我试过不同的'东方'和'典型'无济于事。我应该将哪些选项传递给函数,以使其吐出与时间戳和值相对应的两列数据帧?

3 个答案:

答案 0 :(得分:1)

我不确定pandas read_json,但是您可以通过astype(str)str.splitstr.strip来实现IIUC:

d = {
    "testvalues": [
        [1424754000000, 0.7413],
        [1424840400000, 0.7375],
        [1424926800000, 0.7344],
        [1425013200000, 0.7375],
        [1425272400000, 0.7422],
        [1425358800000, 0.7427]
    ]
}

df = pd.DataFrame(d)
res = df.testvalues.astype(str).str.strip('[]').str.split(', ', expand=True)


In [112]: df
Out[112]:
                testvalues
0  [1424754000000, 0.7413]
1  [1424840400000, 0.7375]
2  [1424926800000, 0.7344]
3  [1425013200000, 0.7375]
4  [1425272400000, 0.7422]
5  [1425358800000, 0.7427]

In [113]: res
Out[113]:
               0       1
0  1424754000000  0.7413
1  1424840400000  0.7375
2  1424926800000  0.7344
3  1425013200000  0.7375
4  1425272400000  0.7422
5  1425358800000  0.7427

答案 1 :(得分:1)

你可以apply a function that splits it into a pd.Series

假设您从

开始
df = pd.read_json(s)

然后只应用分裂函数:

>>>     df.apply(
    lambda r: pd.Series({'l': r[0][0], 'r': r[0][1]}),
    axis=1)
    l   r
0   1.424754e+12    0.7413
1   1.424840e+12    0.7375
2   1.424927e+12    0.7344
3   1.425013e+12    0.7375
4   1.425272e+12    0.7422
5   1.425359e+12    0.7427

答案 2 :(得分:1)

您可以将列表理解与DataFrame构造函数一起使用:

import pandas as pd

df = pd.read_json('file.json')
print df
                testvalues
0  [1424754000000, 0.7413]
1  [1424840400000, 0.7375]
2  [1424926800000, 0.7344]
3  [1425013200000, 0.7375]
4  [1425272400000, 0.7422]
5  [1425358800000, 0.7427]

print pd.DataFrame([x for x in df['testvalues']], columns=['a','b'])
               a       b
0  1424754000000  0.7413
1  1424840400000  0.7375
2  1424926800000  0.7344
3  1425013200000  0.7375
4  1425272400000  0.7422
5  1425358800000  0.7427