Использование pandas json_normalize для преобразования json в фрейм данных, но некоторые столбцы все еще содержат список, который мне нужно преобразовать - PullRequest
0 голосов
/ 21 сентября 2019

Я могу успешно использовать pandas.io.json.json_normalize для преобразования моего объекта json в желаемый формат данных.Однако, кажется, что некоторые столбцы не преобразуются в желаемый формат в кадре данных и остаются в виде списков внутри значений ячеек.

from pandas.io.json import json_normalize
df = json_normalize(res['transactions'])

Что даст мне эти df.columns

Index(['tradeID', 'tradeOpened.guaranteedExecutionFee',
       'tradeOpened.halfSpreadCost', 'tradeOpened.initialMarginRequired',
       'tradeOpened.price', 'tradeOpened.tradeID', 'tradeOpened.units',
       'tradesClosed'], dtype='object')

Обратите внимание, что столбцы, такие как "tradeOpened.price" и "tradeOpened.tradeID", являются желаемым целевым выходом, и они кажутсяработать нормально.Проблема со столбцом 'tradesClosed' - я все еще получаю столбец, который содержит значения ячеек со списком внутри них, который выглядит следующим образом:

[{'tradeID': '2239', 'units': '-2838', 'realiz...

Я хочу, чтобы это было разбито на столбцы, подобныеtradeOpened был.Поэтому у меня должны быть такие столбцы, как «tradeClosed.tradeID» и «tradeClosed.units».

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

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 21 сентября 2019

Не уверен, что существует эффективный способ для пакета pandas / json, но я написал итератор для обновления существующих столбцов.(Некоторые столбцы уже существовали в результате правильного преобразования json при создании исходного кадра данных, но другой неправильный столбец содержал данные, которые необходимо было добавить в эти существующие столбцы)

for idx in adf.index:

    tradeOpenedRow = adf['tradeOpened'][idx]

    if type(tradeOpenedRow) == dict:

        if type(adf.loc[idx,'tradeOpened.price']) == float:
            adf.loc[idx,'tradeOpened.price'] = tradeOpenedRow['price']

        if type(adf.loc[idx,'tradeOpened.tradeID']) == float: 
            adf.loc[idx,'tradeOpened.tradeID'] = tradeOpenedRow['tradeID']

        if type(adf.loc[idx,'tradeOpened.units']) == float:     
            adf.loc[idx,'tradeOpened.units'] = tradeOpenedRow['units']

        if type(adf.loc[idx,'tradeOpened.guaranteedExecutionFee']) == float:     
            adf.loc[idx,'tradeOpened.guaranteedExecutionFee'] = tradeOpenedRow['guaranteedExecutionFee']

        if type(adf.loc[idx,'tradeOpened.halfSpreadCost']) == float:     
            adf.loc[idx,'tradeOpened.halfSpreadCost'] = tradeOpenedRow['halfSpreadCost']

        if type(adf.loc[idx,'tradeOpened.initialMarginRequired']) == float:     
            adf.loc[idx,'tradeOpened.initialMarginRequired'] = tradeOpenedRow['initialMarginRequired']
            print('index ', idx, ' values set')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...