2016-02-25 5 views
1

У меня есть действительный файл json со следующим форматом, который я пытаюсь загрузить в панды.Загрузка Json в Pandas dataframe

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

Существует функция Панды называется read_json(), который принимает в JSon файлов/буферов и выплевывает dataframe, но я не смог заставить его правильно загрузить, который должен показать две колонки, а не один столбец с элементами, похожими на [1424754000000, 0.7413]. Я пробовал разные «ориентиры» и «тип» безрезультатно. Какие параметры следует передать в функцию, чтобы заставить ее выплевывать двухкадровый фреймворк, соответствующий метке времени и значению?

ответ

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 
1

Я не уверен, что панды read_json но IIUC вы могли бы сделать это с astype(str), str.split, str.strip:

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

Вы можете 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 
Смежные вопросы