преобразуйте текстовую строку JSON в Pandas, но каждая ячейка строки заканчивается как массив значений внутри - PullRequest
0 голосов
/ 30 сентября 2018

Мне удается извлечь временной ряд цен с веб-портала.Данные поступают в формате json, и я преобразую их в pandas dataFrame.

К сожалению, данные для разных диапазонов представлены в виде текстовой строки, и я не могу извлечь их должным образом.

Ниже приведены данные json, которые я извлекаю

enter image description here

Я преобразую их в кадр данных pandas, используя этот код

data = pd.DataFrame(r.json()['prices'])

и получить их вот так

enter image description here

Мне нужно извлечь (например) данные из столбца ClosePrice, чтобы я мог сделатьанализ данных и их очистка.

Я пытался использовать

data['closePrice'].str.split(',', expand=True).rename(columns = lambda x: "string"+str(x+1))

, но на самом деле это не работает.

Есть ли способ а) при преобразованииjson to dataFrame, так что цены в пределах closePrice, bidPrice и т. д. извлекаются в отдельные столбцы ИЛИ b) если они были сохранены в dataFrame, извлекают текстовые строки внутри них, так что я могу извлечь цены (например, ставку,ask and lastTraded) внутри текстовой строки?

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Относительно грубым способом, используя ссылки из другого стекаOverflow.

# load and extract the json data
s = requests.Session()
r = s.post(url + '/session', json=data)
loc = <url>
dat1 = s.get(loc)
dat1 = pd.DataFrame(dat1.json()['prices'])

# convert the object list into individual columns
dat2 = pd.DataFrame()
dat2[['bidC','askC', 'lastP']] = pd.DataFrame(dat1.closePrice.values.tolist(), index= dat1.index)
dat2[['bidH','askH', 'lastH']] = pd.DataFrame(dat1.highPrice.values.tolist(), index= dat1.index)
dat2[['bidL','askL', 'lastL']] = pd.DataFrame(dat1.lowPrice.values.tolist(), index= dat1.index)
dat2[['bidO','askO', 'lastO']] = pd.DataFrame(dat1.openPrice.values.tolist(), index= dat1.index)
dat2['tStamp'] = pd.to_datetime(dat1.snapshotTime)
dat2['volume'] = dat1.lastTradedVolume

получите эквивалент ниже

enter image description here

0 голосов
/ 30 сентября 2018

Импорт:

import pandas as pd
import json
from pandas.io.json import json_normalize

Данные:

data = {'prices': [{'closePrice': {'ask': 1.16042, 'bid': 1.16027, 'lastTraded': None},
                    'highPrice': {'ask': 1.16052, 'bid': 1.16041, 'lastTraded': None},
                    'lastTradedVolume': 74,
                    'lowPrice': {'ask': 1.16038, 'bid': 1.16026, 'lastTraded': None},
                    'openPrice': {'ask': 1.16044, 'bid': 1.16038, 'lastTraded': None},
                    'snapshotTime': '2018/09/28 21:49:00',
                    'snapshotTimeUTC': '2018-09-28T20:49:00'}]}

Фрейм данных:

df = json_normalize(data['prices'])

Выход:

Output Json

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...